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+个数据包