关于Java UDP的端口占用问题

自己学这个的时候,犯了一个很丢脸的问题,就是这个UDP端口占用问题,如果是正常的端口占用,直接找出来,kill掉就没事了,或者换一个端口。而我遇到的这个问题就很白痴了。

我先贴一下源码:

public class AndroidServer {

	public static void main(String[] args) throws IOException {

		DatagramSocket socket = null;

		byte[] data = null;

		DatagramPacket packet = null;

		while (true) {
			
			socket = new DatagramSocket(4400);

			data = new byte[1024];

			packet = new DatagramPacket(data, data.length);
			
			socket.receive(packet);
			
			new Thread(new AndroidRunnable(socket, packet, data)).start();
			
		}
	}
}
然后发现一直都是端口占用问题,一直很郁闷,各种找也找不到资源和类似问题的,后来仔细看了一下程序,尼玛,被自己蠢哭了,放在死循环里面,不就一直在请求这个端口吗?一次又一次,不占用才怪。赶紧改过来
public class AndroidServer {

	public static void main(String[] args) throws IOException {

		DatagramSocket socket = new DatagramSocket(4400);

		byte[] data = new byte[1024];

		DatagramPacket packet = new DatagramPacket(data, data.length);

		while (true) {
			
			socket.receive(packet);
			
			new Thread(new AndroidRunnable(socket, packet, data)).start();
			
		}
	}
}
public class AndroidRunnable implements Runnable {
	
	DatagramSocket socket=null;
	DatagramPacket packet=null;
	byte[] data=null;
	
	public AndroidRunnable(DatagramSocket socket,DatagramPacket packet,byte[] data) {
		this.socket=socket;
		this.packet=packet;
		this.data=data;
	}

	@Override
	public void run() {
		
		try {
			
			String info=new String(data,0, packet.getLength());
			
			System.out.println("客户端:"+info);
			
			
			InetAddress address=packet.getAddress();
			
			byte[] data2="你好哇,李银河!!!".getBytes("utf-8");
			
			DatagramPacket packet2=new DatagramPacket(data2,data2.length, address,packet.getPort());
			
			socket.send(packet2);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

现在OK了,不过丢包还是很严重!!!


经验分享 程序员 微信小程序 职场和发展