C ++でTCPサーバーに要求するTCPpythonクライアントがあります。サーバーにアクセスできないため、サーバー部分のコードを変更できません。問題は、クライアントからの要求がサーバー部分のデータを受信しないことがあるため、プログラムがdata = sock.recv(1024)
回線でブロックされることです。だからどうすればこの問題を解決できるのだろうか。データが受信されない場合は、その行の後に条件文を配置しようとしましたが、data = sock.recv(1024)
行を渡す方法がありません。
try:
data = sock.recv(12) # this always gets data, it is a message send by the server that verifies the connection is alright
print("Received: ", ":".join("{:02x}".format(c) for c in data))
data = sock.recv(1024)
print("Received: ", ":".join("{:02x}".format(c) for c in data))
except IOError as e:
pass
socket.settimeout(N)
またはを使用して操作をブロックするためのタイムアウトを設定する必要がありsocket.setdefaulttimeout(N)
ます。このように、データが受信されなかった場合、操作はN秒後に失敗します。
2番目のオプションは、非ブロッキングIOを使用することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加