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);
}
なぜこれが起こっているのか誰にも分かりますか?どんなアイデアでも大歓迎です。