2016-08-03 19 views
0

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

コード:受信中

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

:データ送信

try: 

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

except socket.error: 

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

上記受信声明で

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.. 

を、recvpackの確認方法、ANYDATAを得ていないでrecvfrom()場合次の操作に戻ります。socket.settimeout()またはsocket.setblocking()が解決策です。これらを使用する方法。

答えて

0

ブロッキングコールに気にしない場合、通常はメッセージを待つために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

だから、基本的にはこのような何かを行うことができます

関連する問題