0

私はPythonでソケットプログラミングに取り組んでいます。ESP pythonを使用して、サーバーへのソケットを作成し、リクエストを送信しました(APIパケット形式で、サーバーコードに従って応答します)。ソケットを受信する際に、データを確認する必要があります(データを受信した場合は、次の操作に進む必要があります。そうでない場合は、もう一度リクエストを送信する必要があります)。送信は大丈夫です。受信ソケットで、データを受信して​​いない場合、次の命令に進まない..助けてください。

コード:

try:

    s = socket(AF_INET, SOCK_DGRAM)
    print "socket created"

except socket.error:

    print "failed to create socket"
    sys.exit()

データの送信:

s.sendto("packet of data", 0, (HOST,PORT))

受信時:

recvpack, payload=s.recvfrom(1024)

if not recvpack:

    s.sendto("packet of data", 0, (HOST,PORT))

elif(recvpack[]="packet of data"):

    pass # continue to next operations..

上記の受信ステートメントで、データが取得されない場合、次の操作recvfrom()を確認して戻す方法.または解決策である場合、これらの使用方法..recvpacksocket.settimeout()socket.setblocking()

4

1 に答える 1

1

呼び出しのブロックが気にならない場合は、通常、settimeout を使用してメッセージを待ちます。時間内にメッセージを受信しない場合、settimeout は例外を発生させます。

したがって、基本的には次のようなことができます。

s.settimeout(1)
try:
    recvpack, payload = s.recvfrom(1024)
except error:
    recvpack = None
if recvpack is not None:
    ...

ソース: https://docs.python.org/2/library/socket.html#socket.socket.settimeout

于 2016-08-03T08:38:05.117 に答える