1

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

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

  • 客户端通过 DatagramSocket 发送 DatagramPacket。
  • 服务器(计算机)接收它。
  • 应用程序永远不会收到它,也永远不会发回正确的数据包。
  • 我的操作系统发回一条 ICMP 消息:destination unreachable (Port unreachable)

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

重要的代码片段:

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);
}

有谁知道为什么会这样?任何想法都会非常感激。

4

1 回答 1

2

“端口不可达”表示该端口没有接收任何内容。你在某个地方弄错了端口。

顺便说一句,第一行打算完成什么?因为它没有。

于 2012-09-22T21:43:16.297 回答