java基础之网络(TCP-Socket)

一)Socket通信

  1)TCP协议是面向连接、可靠、有序的、以字节流的方式发送数据

2)基于TCP协议实现网络通信的类

1、客户端的Socket类

2、服务端的ServerSocket类

3)Socket通信实现步骤

1、创建ServerSocket和Socket

2、打开连接到Socket的输入、输出流

3、按照协议对Socket进行读写操作

4、关闭输入输出流、关闭Socket


4)

ServerSocket

	public ServerSocket(int port)
            	 throws IOException
创建绑定到特定端口的服务器套接字。端口 0 在所有空闲端口上创建套接字。 


public Socket accept()
              throws IOException
侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。 


public void close()
           throws IOException
关闭此套接字。 在 accept() 中所有当前阻塞的线程都将会抛出 SocketException


Socket

public Socket(InetAddress address,
              int port)
       throws IOException
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 

public InputStream getInputStream()
                           throws IOException
返回此套接字的输入流。 


public OutputStream getOutputStream()
                             throws IOException
返回此套接字的输出流。

如果此套接字具有关联的通道,则得到的输出流会将其所有操作委托给通道。如果通道为非阻塞模式,则输出流的 write 操作将抛出 IllegalBlockingModeException。  



public void shutdownInput()
                   throws IOException
此套接字的输入流置于“流的末尾”。发送到套接字的输入流端的任何数据都将被确认然后被静默丢弃。

如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将返回 EOF(文件结束符)。 


public void shutdownOutput()
                    throws IOException
禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。 


5)服务端
1、创建ServerSocket对象,绑定监听端口
2、通过accept()方法监听客户端请求
3、连接建立后,通过输入流读取客户端发送的请求信息
4、通过输出流向客户端发送响应信息
5、关闭相关资源
     客户端
1、创建Socket对象,指明需要连接的服务器的地址和端口号
2、连接建立后,通过输出流向服务器端发送请求信息
3、通过输入流获取服务器响应的信息
4、关闭相关资源





服务端:
//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
			ServerSocket serverSocket = new ServerSocket(8888);
			Socket socket = null;
			System.out.println("***服务器即将启动,等待客户端的连接***");
			
			//2、调用accept()方法开始监听,等待客户端的连接
			socket = serverSocket.accept();
			//3、获取输入流,并读取客户信息
			InputStream is = socket.getInputStream();//字节流信息
			InputStreamReader isr = new InputStreamReader(is);//将字节流包装为字符流
			BufferedReader br = new BufferedReader(isr);//为输入流添加缓冲
			String info = null;
			while ((info=br.readLine()) != null) {//循环读取客户端信息
				System.out.println("我是服务器,客户端说: " + info);
				
				
			}
			socket.shutdownInput();//关闭输入流
			
			//4、关闭资源
			br.close();
			isr.close();
			is.close();
			socket.close();
			serverSocket.close();





客户端:

//1.创建客户端Socket,指定服务器地址和端口
			Socket socket = new Socket("localhost",8888);
			//2.获取输出流,向服务器端发送信息
			OutputStream os = socket.getOutputStream();//字节输出流
			PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流
			pw.write("用户名:xiaoli;密码:789");
			pw.flush();
			socket.shutdownOutput();
			
			//4.关闭资源
			pw.close();
			os.close();
			socket.close();


















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值