使用DatagramSocket时无法访问端口

时间:2012-09-22 14:24:00

标签: java networking udp datagram icmp

我创建了使用UDP传输数据的客户端和服务器软件(由于TCP带宽限制,我们需要使用UDP)。当我在localhost上运行时,它就像我想要的那样运行,所以我将服务器应用程序移动到实际的服务器上,这就是出现问题的时候。

经过一个小时的调试和跟踪后,会发生这种情况:

  • 客户端通过DatagramSocket发送DatagramPacket。
  • 服务器(计算机)收到它。
  • 应用程序从不接收它,也从不发回正确的数据包。
  • 我的操作系统发回ICMP消息:目的地不可达(端口不可达)

客户端在端口25055上运行,服务器在25056-25060上运行。在Wireshark跟踪中,我发现我可以看到数据包是从正确的端口发送的。我已经禁用了防火墙并为该软件授予了顶级用户权限。

重要的代码:

socket = new DatagramSocket(clientPort);
socket = new DatagramSocket(serverPort);

private void sendPacket() throws Exception
{
packet = new DatagramPacket(data, data.length, address, serverPort);
socket.send(packet);
}

private void receivePacket(int packetSize) throws Exception
{
if(data == null || data.length != packetSize)
    data = new byte[packetSize];
packet = new DatagramPacket(data, packetSize);
socket.receive(packet);
}

有没有人知道为什么会这样?任何想法都会被大大贬低。

1 个答案:

答案 0 :(得分:2)

'端口无法访问'表示该端口没有收到任何内容。你在某处弄错了端口。

BTW第一条打算完成的是什么?因为它没有。

相关问题