1

私のマルチスレッド UDP サーバーは、最大 100 のスレッドを起動します。各スレッドで外部デバイスに接続し、それぞれからデータ ストリームを受信します。それを受信した後、外部デバイスに確認応答を送信する必要がある一時的なウィンドウがあります。

run() 内の受信ビット。

byte[] receiveData = new byte[2000];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);

受信後に run() 内でビットを送信します。

DatagramPacket reply = new DatagramPacket(sendData,sendData.length,receivePacket.getAddress(),receivePacket.getPort();
serverSocket.send(reply);

Wireshark を実行してネットワーク トラフィックを分析すると、サーバーがデータ ストリームを受信した直後に ack パッケージを送信しないことに気付きました。確認パッケージがデバイスに送信されるまで、数秒かかり、他のデバイスとの通信がいくつか発生します。デバイス側のタイムアウト。

マルチスレッド環境では、サーバーはすべてのスレッドが終了するのを待ってからパケットを送信しますか?

ほとんどの場合、サーバーから送信されるパケットは、サーバーへの入力として受信されるパケットを待機するためです。

ソケットには、読み取りと書き込み用の同じキューがありますか?

あなたの助けを前もってありがとう。:)

4

1 に答える 1