各大网站搜索引擎提交入口,互联网营销师怎么做,synology建设网站,好客山东app下载目录
一、认识相关API
1#xff09;DatagramSocket
2#xff09;DatagramPacket
3#xff09;InetSocketAddress
二、UDP数据报套接字通信模型概述
三、回显客户端-服务器通信
1#xff09;服务器代码
2#xff09;客户端代码 一、认识相关API
1#xff09;Data…目录
一、认识相关API
1DatagramSocket
2DatagramPacket
3InetSocketAddress
二、UDP数据报套接字通信模型概述
三、回显客户端-服务器通信
1服务器代码
2客户端代码 一、认识相关API
1DatagramSocket
DatagramSocket 常用构造方法DatagramSocket()创建UDP数据报Scoket套接字绑定本机任意端口通常用于客户端。DatagramSocket(int port)创建UDP数据报Scoket套接字绑定本机指定端口通常用于服务器。
DatagramSocket 常用方法void receive(DatagramPacket p)接收数据报并写入参数p中没有收到则会阻塞等待。void send(DatagramPacket p)发送数据报。void close()关闭socket套接字。
2DatagramPacket
DatagramPacket 常用构造方法DatagramPacket(byte[] buf, int length)构造用于存储数据报的容器指定字节数组和数组长度。DatagramPacket(byte[] buf, int length, SocketAddress address)构造用于存储数据报的容器指定字节数组、数组长度、目的地IP地址和端口号。
DatagramPacket 常用方法InetAddress getAddress()从数据报中获取目的地的IP地址。int getPort()从数据报中获取目的地的端口号。byte[] getData()从数据报中获取字节数据。
3InetSocketAddress
InetSocketAddress是SocketAddress的子类。InetSocketAddress 常用构造方法InetSocketAddress(String ip, int port)构造Socket地址包含IP地址和端口号。InetSocketAddress(InetAddress addr, int port)构造Socket地址包含IP地址和端口号。
二、UDP数据报套接字通信模型概述
UDP协议具有无连接面向数据报的特征。每次通信双方都是没有建立连接的并且一次性发送或接收全部通信内容。UDP通信使用DatagramSocket类构建套接字使用DatagramPacket类构建数据报。UDP通信流程客户端构造请求-发出请求-服务器接收请求-解析请求-处理请求-构造响应-返回响应-客户端接收响应-解析响应-处理响应
三、回显客户端-服务器通信
1服务器代码
public class UDP_Echo_Server {private DatagramSocket socket null;public UDP_Echo_Server(int port) throws SocketException {//作为服务器端根据指定端口号创建一个数据报连接通道socket new DatagramSocket(port);}//调用该方法启动服务器public void start() throws IOException {System.out.println(服务器启动);while(true){//新建一个数据报容器用于存放请求DatagramPacket requestPacket new DatagramPacket(new byte[4096],4096);//接收数据报(请求)如果暂时没有请求则在这里阻塞等待socket.receive(requestPacket);//将获得的数据报(请求)转换为字符串String request new String(requestPacket.getData(),0, requestPacket.getLength());//通过process方法对请求报进行处理并形成响应String response process(request);//将响应转换为数据报数据包中已经指定了目的地IPDatagramPacket responsePacket new DatagramPacket(response.getBytes(),response.getBytes().length,requestPacket.getSocketAddress());//将数据报(响应)发送socket.send(responsePacket);//打印日志System.out.printf([%s,%d] req%s res%s\n,requestPacket.getAddress().toString(),requestPacket.getPort(),request,response);}}private String process(String request) {return request;}public static void main(String[] args) throws IOException {UDP_Echo_Server server new UDP_Echo_Server(端口号);server.start();}
}
2客户端代码
public class UDP_Echo_client {private DatagramSocket socket null;private String serverIP ;private int serverPort 0;public UDP_Echo_client(String IP,int Port) throws SocketException {//作为客户端需要显式知道服务器的IP和端口号this.serverIP IP;this.serverPort Port;//客户端自己的端口号由系统自行分配即可根据系统分配的端口号创建一个数据报连接通道socket new DatagramSocket();}//调用该方法启动客户端public void start() throws IOException {System.out.println(客户端启动);Scanner sc new Scanner(System.in);while (true){System.out.print(-);String request sc.next();//将字符串转换为数据报(请求)并在数据报中指定了目的地IP及端口DatagramPacket requestPacket new DatagramPacket(request.getBytes(),request.getBytes().length,new InetSocketAddress(serverIP,serverPort));//发送数据报(请求)socket.send(requestPacket);//新建一个数据报容器用于存放响应DatagramPacket responsePacket new DatagramPacket(new byte[4096],4096);//接收数据报(响应)如果暂时没有响应则在这里阻塞等待socket.receive(responsePacket);//将获得的数据报(响应)转换为字符串String response new String(responsePacket.getData(),0,responsePacket.getLength());//打印响应System.out.println(response);}}public static void main(String[] args) throws IOException {UDP_Echo_client client new UDP_Echo_client(IP地址端口号);client.start();}
} 阅读指针 - 《TCP回显服务器》
链接生成中........