基于UDP协议的Socket编程
程序员文章站
2022-06-25 18:02:30
...
TCP的可靠保证,是它的三次握手机制,这一机制保证校验了数据,保证了他的可靠性。而UDP就没有了,所以不可靠。不过UDP的速度是TCP比不了的,而且UDP的反应速度更快,QQ就是用UDP协议传输的,HTTP是用TCP协议传输的。主要需要关注的还是TCP/IP协议的socket编程
下面是基于UDP协议写的客户端与服务端实现通信的代码。
第一步:写一个java project,一个client 一个Server
第二步骤:编写服务器端的代码如下:
第三步,编写客户端的代码如下:
第四步:运行服务器端的代码,控制台显示处于监听状态:结果如下图
第五步,运行客户端的代码,此时服务端收到客户端发送过来的信息:
我们再去查看客户端的控制台,发现控制台输出服务器端发送过来的响应信息:
下面是基于UDP协议写的客户端与服务端实现通信的代码。
第一步:写一个java project,一个client 一个Server
第二步骤:编写服务器端的代码如下:
package com.udp.socket.server; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketAddress; import java.net.SocketException; /** * 基于DUP协议的服务器端的代码 * @author lfc * */ public class server { public static void main(String[] args) { try { // 1,创建服务器端,绑定端口 DatagramSocket ds=new DatagramSocket(8800); // 2,确定接收数据包的数据的大小 byte[] by=new byte[1024]; // 3,创建接收数据包的数据类型,数据存储在数组中 DatagramPacket dp=new DatagramPacket(by, by.length); // 4,通过套字节接收数据 ds.receive(dp); // 5,解析客户端发送过来的数据 String string=new String(by,0,dp.getLength()); //打印来自客户端的信息 System.out.println("客户端发送过来的信息是:"+string); //当收到客户端发送过来的信息后,服务器端自动回答一个信息 String hello="hello!"; byte[] reply=hello.getBytes(); //获取发送信息过来的客户端的ip地址 SocketAddress sa=dp.getSocketAddress(); //数据放入数据包中准备发送给客户端,三个参数,发送的内容,长度,以及客户端的ip地址 DatagramPacket dp2=new DatagramPacket(reply,reply.length,sa); //发送给客户响应信息开始 ds.send(dp2); // 6,关闭资源 ds.close(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
第三步,编写客户端的代码如下:
package com.udp.socket.client; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; /** * 基于UDP协议的客户端代码 * * @author lfc * */ public class client { public static void main(String[] args) { // 1,创建客户端,确定发送到服务器端的ip以及端口 String info="你好,在吗?"; byte[] by=info.getBytes(); InetAddress ia=null; try { ia=InetAddress.getByName("localhost"); } catch (UnknownHostException e) { e.printStackTrace(); } // 2,创建数据包,指定数据包的长度并且发送到服务器ip的指定端口 int port=8800; DatagramPacket dp=new DatagramPacket(by, by.length,ia,port); // 3,创建DatagramSocket对象 DatagramSocket ds=null; try { ds=new DatagramSocket(); } catch (SocketException e) { e.printStackTrace(); } // 4,向服务器发送数据包 try { ds.send(dp); } catch (IOException e) { e.printStackTrace(); } byte[] receive=new byte[1024]; //客户端创建接收数据包的数据类型,数据存储在数组中 DatagramPacket dpre=new DatagramPacket(receive, receive.length); // 客户端通过套字节接收数据 try { ds.receive(dpre); } catch (IOException e) { e.printStackTrace(); } //输出服务器给客户端的响应信息 String string=new String(receive,0,receive.length); System.out.println("服务器响应的信息是:"+string); // 5,关闭资源 ds.close(); } }
第四步:运行服务器端的代码,控制台显示处于监听状态:结果如下图
第五步,运行客户端的代码,此时服务端收到客户端发送过来的信息:
我们再去查看客户端的控制台,发现控制台输出服务器端发送过来的响应信息: