【发布时间】:2015-10-13 05:32:49
【问题描述】:
我制作了一个使用 UDP 的 java 应用程序,但在我的计算机上托管时似乎无法接收 LAN 外部的数据包。我尝试将我的应用程序放在托管服务器上,它似乎可以工作(接收数据包)。
是什么导致这种情况发生?我希望它也能在我的电脑上运行。
客户:
try {
this.socket = new DatagramSocket(2500);
} catch (SocketException e1) {
System.out.println("Could not establish connection");
return;
}
while(true){
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
try{
socket.receive(packet);
}catch(IOException e){
System.out.println("Connection close");
break;
}
System.out.println("RECEIVED " + new String(packet.getData()));
}
服务器:
try {
this.socket = new DatagramSocket(25860);
} catch (SocketException e) {
e.printStackTrace();
}
try {
byte[] data = datas.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, ipAddress, 2500);
socket.send(packet);
}catch(IOException e) {
}
System.out.println("Sent " + ipAddress.getHostAddress() + ":" + port + " " + new String(datas));
IP 地址是正确的,它打印出的 IP 与我的客户端完全相同。但是我仍然没有收到。
【问题讨论】:
-
当您无法创建
DatagramSocket,时不要打印“无法建立连接”,或者当您收到IOException接收UDP 数据报时“连接关闭”。打印异常。首先没有要建立或关闭的连接,其次,您正在抑制重要的调试信息。并且永远忽略 IOException,就像在send()之后一样。修复该问题并根据实际情况调整您的问题。new String(packet.getData()))应该是new String(packet.getData(), packet.getOffset(), packet.getLength()))。