多线程网络编程简介
在客户端,可以把处理服务器端响应消息的任务放到一个单独线程中,在主线程中接收用户输入和发送请求消息。
服务器的作用就是为了服务多个客户端,对于多个客户端并发请求的处理,在网络编程中,采用多线程处理方式解决。每当服务器端接收到客户端请求后,产生一个新的线程处理客户端请求。
开启线程比较消耗系统资源,所以应用程序中可以开辟的线程个数总是有限的。
可以结合使用线程池技术,实现服务器端的并发处理请求。
单服务器端多线程接收多次通讯
SocketServer建立后,通过accept来等待client连接
Client连接Server端
Server开启一个新的线程来去处理
Server端建立inputstream和outputstream
Client端建立inputstream和outputstream
Client关闭
Server端等待下次连接
UDP网络编程简介
建立网络连接时,有两种传输层协议(TCP传输协议和UDP传输协议)。
UDP传输协议:一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
UDP传输协议通过数据包方式向服务器发送数据,那么在数据包中肯定需要包含服务器的IP信息、端口信息等内容。因此,UDP网络编程必须提供以下对象来完成不同的任务:
网络两端接收消息或发送消息的对象(监听本机端口、发送消息、接收消息)。
数据包对象(包含目的地IP和端口信息、数据报文信息)。
DatagramSocket类:客户端/服务器端网络Socket端口对象。
构造方法:
DatagramSocket(); // 创建一个空的Socket对象
DatagramSocket(int port); // 创建指定监听端口的Socket对象
常用方法:
void send(DatagramPacket p); // 发送数据报文
void receive(DatagramPacket p); // 接收数据报文
DatagramPacket类:数据报文对象。
构造方法:
DatagramPacket(byte[] buf, int len); // 用空数组创建对象,用来接收数据。
DatagramPacket(byte[] buf, int offset, int len); // 接收数据的特定部分。
DatagramPacket(byte[] buf, int len, InetAddress addr, int port); // 包含数据的数组创建对象,用来发送数据,同时指明数据目的地和目标端口号。
DatagramPacket(byte[] buf, int offset, int len, InetAddress addr, int port); // 发送数据的指定部分。
客户端程序:
基本工作流程:
创建DatagramSocket对象
封装请求数据,创建DatagramPacket对象
发送请求
服务器程序:
基本工作流程:
创建DatagramSocket对象,监听特定端口
创建DatagramPacket对象(空缓冲区)
接收客户端请求
封装服务器响应数据,创建DatagramPacket对象
发送服务器响应给指定客户端