1

ポートでリッスンし、UDP データを読み取るより良い方法はありますか?

私は

self.udps.bind((self.address,self.port)
ata, addr = self.udps.recvfrom(1024)

ベアスクリプトまたはスレッドでそのデータを取得するまで、この状態でロックされているようです。

これはうまく機能しますが、リッスンを停止するように言いたい場合は、データを受信して​​先に進むまで、リッスンを停止する必要があることを認識しません。正常にシャットダウンするために、ポートに毎回 UDP データを送信する必要がありました。特定の条件ですぐにリスニングを停止させる方法はありますか?

4

1 に答える 1

1

recfrom指定されたポートにデータが到着するまで待機します。

永遠にリッスンしたくない場合は、タイムアウトを設定します。

self.udps.bind((self.address,self.port)
self.udps.settimeout(60.0)  # set 1min timeout
while some_condition:
    try:
        ata, addr = self.udps.recvfrom(1024)
    except socket.timeout:
        pass  # try again while some_condition
    else:
         # work with the received data ...
于 2013-06-29T18:58:13.420 に答える