0

サーバーに登録するPythonでクライアントを実行しています。そのクライアントは UDP パケットを送信し、サーバーからの応答パケットregisterを待ちます。register accepted

UDP であるため、一部のパケットが失われる可能性があるため、次のコードが必要です。

パケットを送信し、応答を 5 秒間待ちます。パケットが受信されない場合は、再度パケットを送信してから 10 秒間待ちます。応答がない場合は、15 秒間待ちます。応答がない場合は、ループを中断します。

私の問題は、私がやっているパケットを受信することです:

skt1.sendto(pqtUdp,(srvAdr,prtUdp))
data,addrs = skt1.recvfrom(56)

そして rcvfrom はブロッキングメソッドです。検索したところselect、パケットを受信したときにソケットを読み取って取得できると思いますが、その方法がわかりませんselect。自分がやっていることの簡単な例が見つかりません。

誰か助けてくれませんか?

ありがとう!

4

2 に答える 2

1

これはscapyを使った簡単な作業です:

>>> sr(IP(dst="172.20.29.5/30")/UDP(dport=[21,22,23]),inter=5,retry=2,timeout=1)

sr は sendreceice 関数で、inter で待機間隔とリトライ回数とタイムアウトを指定できます。

于 2014-04-02T11:12:30.797 に答える
0

ソケットをノンブロッキングに設定すると、これを簡単に実現できます。ソケットを宣言したら、次のようにします。

skt1.setblocking(0)

recvfrom() がパケットを受信しない場合にこれを行うと、次のように処理して先に進むことができるエラーが発生します。

try:
    skt1.recvfrom(64)
except socket.error:
    pass
于 2016-04-24T03:24:05.750 に答える