项目网站开发,大数据网站,建设网站招标文件,广州海珠区二手房房价UDP Socket编程 一. DatagramSocket二. DatagramPacket三. InetSocketAddress四. 执行流程五. 代码示例: UDP 回显服务器 数据报套接字#xff1a; 使用传输层 UDP 协议
UDP: 即 User Datagram Protocol#xff08;用户数据报协议#xff09;#xff0c;传输层协议。
UDP… UDP Socket编程 一. DatagramSocket二. DatagramPacket三. InetSocketAddress四. 执行流程五. 代码示例: UDP 回显服务器 数据报套接字 使用传输层 UDP 协议
UDP: 即 User Datagram Protocol用户数据报协议传输层协议。
UDP的特点:
无连接不可靠传输面向数据报全双工有接收缓冲区无发送缓冲区大小受限一次最多传输64k
对于数据报来说可简单理解为传输的数据是一块一块的发送一块数据假如100个字节必须一次发送接收也必须一次接收100个字节而不能分100次每次接收1个字节。
一. DatagramSocket
DatagramSocket 是UDP Socket用于发送和接收UDP数据报。
构造方法: 方法: 二. DatagramPacket
DatagramPacket是UDP Socket发送和接收的数据报。
构造方法 方法 构造UDP发送的数据报时需要传入 SocketAddress 该对象可以使用 InetSocketAddress 来创建。
三. InetSocketAddress
InetSocketAddress 是SocketAddress 的子类
构造方法 四. 执行流程
对于UDP协议来说具有无连接面向数据报的特征即每次都是没有建立连接并且一次发送全部数据报一次接收全部的数据报。对于一个服务端来说重要的是提供多个客户端的请求处理及响应流程如下 五. 代码示例: UDP 回显服务器
服务器端代码:
class UdpEchoServer {public DatagramSocket socket;//udp的服务器需要自己指定端口号public UdpEchoServer(int port) throws SocketException {socketnew DatagramSocket(port);}public void start() throws IOException {System.out.println(启动服务器);while(true){//三个步骤//1.接受客户端发来的请求//先构造出数据报(盘子)DatagramPacket requestPacketnew DatagramPacket(new byte[1024],1024);//接收数据socket.receive(requestPacket);//输出型参数, receive 会将数据填充到 requestPacket 中//将数据报解析成一个字符串String requestnew String(requestPacket.getData(),0,requestPacket.getLength(),UTF-8);//注意这里求的长度直接用的是数据报//2.根据请求计算出响应String responseprocess(request);DatagramPacket responsePacketnew DatagramPacket(response.getBytes(),response.getBytes().length,//注意长度是字节数组的长度requestPacket.getSocketAddress());//注意要加上IP地址和端口,这里合起来写了//3.响应返回给客户端socket.send(responsePacket);System.out.printf([reqIP:%s req端口号:%d][req:%s resp:%s]\n,requestPacket.getAddress().toString(),responsePacket.getPort(),request,response);}}/*** 根据请求计算响应, 这里面只是模拟, 直接返回了原字符串*/public String process(String request){return request;}public static void main(String[] args) throws SocketException {UdpEchoServer udpEchoServernew UdpEchoServer(9090);try {udpEchoServer.start();} catch (IOException e) {throw new RuntimeException(e);}}
}客户端代码:
class UdpEchoClient {public DatagramSocket socket;//服务器的IP地址和端口号,传送数据时需要知道,放在数据报中public String serverIp;public int ServerPort;public UdpEchoClient(String serverIp,int serverPort) throws SocketException {socketnew DatagramSocket();//客户端利用系统随机分配的端口号,防止自己手动的端口号不能用this.serverIpserverIp;this.ServerPortserverPort;}public void start() throws IOException {Scanner scannernew Scanner(System.in);while(true){//五个步骤//1.先接收用户输入的字符串System.out.println(-);String requestscanner.next();//2.构造数据报//注意数据报中除了数据内容还要包含服务器IP和端口DatagramPacket requestPacketnew DatagramPacket(request.getBytes(),request.getBytes().length, InetAddress.getByName(serverIp),ServerPort);//3.客户端发送数据报给服务器socket.send(requestPacket);//4.从服务器接收响应,并解析DatagramPacket responsePacketnew DatagramPacket(new byte[1024],1024);socket.receive(responsePacket);//解析数据String responsenew String(responsePacket.getData(),0,responsePacket.getLength(),UTF-8);//同样注意这里求长度用的也是数据报//5.打印在控制台上System.out.printf(req:%s resp:%s\n,request,response);}}public static void main(String[] args) throws IOException {//如果服务器在其他机器上就需要将IP地址和端口号更改了UdpEchoClient udpEchoClientnew UdpEchoClient(127.0.0.1,9090);udpEchoClient.start();}
}
注意当然要先启动服务器再启动客户端啦
好啦 以上就是对 UDP Socket编程的讲解希望能帮到你 评论区欢迎指正 !