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