2

DatagramSocketを使用してUDPJava実装を実行しています。ここで、受信は1つのスレッドで実行され、送信操作は別のスレッドで実行されます。プログラムが起動したら、サーバーに電話をかけて情報を受け取る必要があります。問題は、スレッドが原因で、最初に受信スレッドを開始しても、送信が最初に送信されることがあり、サーバーが応答したときに、ソケットが他のスレッドでまだreceive()を呼び出していないことです。このスレッドはreceive()行をブロックしているため、フラグを使用してreceive()が呼び出されたことを確認することはできません。ソケットが現在receive()でブロックされているかどうかを確認して、その状態を確認するまで送信を待つことができるようにする方法はありますか?

4

2 に答える 2

1

recvfrom()ループの直前にrxスレッドからtxスレッドを開始し、txスレッドの開始時にsleep(2000)を配置してから、入力キュー、または送信するものを取得するために通常行うことを実行します。

于 2012-10-14T10:51:40.290 に答える
0

2つのソケットは必要ありません。

  1. シングルを作成するDatagramSocket.すぐに「受信状態」になります。

  2. を介して受信する受信スレッドを開始しますDatagramSocket.

  3. を送信する送信スレッドを開始しますDatagramSocket.

(2)と(3)の順序は、もはや重要ではありません。

于 2012-10-16T10:03:34.313 に答える