UDP通信的效率比TCP要高,大家都这么说,大家还说UDP的通信是不可靠的,我实验了一把UDP的通信丢包率,结果最差的情况的丢包率也是0.2%。下面是测试代码
数据发送端:
package com.ljh.UDPEfficiency; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketAddress; public class Client { private static DatagramSocket dataGramSocke; private static DatagramPacket datagramPacket,ensruePacket; private static SocketAddress localAddress, destAddress; public static void main(String[] args) throws Exception { localAddress = new InetSocketAddress("172.16.12.28", 5000); dataGramSocke = new DatagramSocket(localAddress); destAddress = new InetSocketAddress("120.27.37.122", 6000); System.out.println("与服务器" + destAddress.toString() + "聊天:"); int count=0; while (true) { count++; String msg = "客户端"+count; byte bytearray[] = msg.getBytes(); datagramPacket = new DatagramPacket(bytearray, bytearray.length, destAddress); dataGramSocke.send(datagramPacket); System.out.println(msg); if(count==10000){ System.out.println("断开连接"); dataGramSocke.close(); break; } } } }
数据接收端:
package com.ljh.UDPEfficiency; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketAddress; public class Server { private static DatagramSocket dataGramSocke; private static DatagramPacket recvPacket, returnEnsurePk; private static SocketAddress localAddress; public static void main(String[] args) throws Exception { localAddress = new InetSocketAddress("127.0.0.1", 6000); dataGramSocke = new DatagramSocket(localAddress); int count = 0; while (true) { byte recv[] = new byte[30]; recvPacket = new DatagramPacket(recv, recv.length); dataGramSocke.receive(recvPacket); String recvstr = new String(recvPacket.getData(),0,recvPacket.getLength()); System.out.println(recvstr); count++; System.out.println("count=" + count); } } }
每次测试,发送10000个数据包,大概能接收到9980+个数据包