关于Java UDP的端口占用问题

来源:互联网 发布:禁用学校还原软件 编辑:程序博客网 时间:2024/06/10 00:12

自己学这个的时候,犯了一个很丢脸的问题,就是这个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;}@Overridepublic 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了,不过丢包还是很严重!!!




1 0
原创粉丝点击