1

UDP を使用してデータを転送するクライアントおよびサーバー ソフトウェアを作成しました (TCP 帯域幅の制限のため、UDP を使用する必要があります)。ローカルホストで実行すると、希望どおりに実行されるため、サーバーアプリケーションを実際のサーバーに移動したところ、問題が発生しました。

1 時間のデバッグとトレースの後、次のようになります。

  • クライアントは DatagramSocket を介して DatagramPacket を送信します。
  • サーバー(コンピュータ)が受信します。
  • アプリケーションはそれを受信せず、正しいパケットを送り返しません。
  • OS が 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);
}

なぜこれが起こっているのか誰にも分かりますか?どんなアイデアでも大歓迎です。

4

1 に答える 1

2

「Port unreachable」は、そのポートで何も受信していないことを意味します。どこかでポートを間違えました。

ところで、最初の行は何を達成することを目的としていますか? そうではないからです。

于 2012-09-22T21:43:16.297 に答える