UDP通信的丢包问题

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

猜你喜欢

转载自938743180.iteye.com/blog/2213729