Python でクライアントを作成する必要がある TCP サーバーがあります。
サーバーはarduino_uipライブラリを使用する arduino です。サーバー コードは、そのライブラリの TCP サーバーの例と (ほぼ) 同じです。nc をクライアントとして使用すると正常に動作します。
しかし、(この回答のように)Pythonソケットを使用してサーバーと通信すると、サーバーはソケットのシャットダウンまたはクローズでハングします。
これはサーバーの問題である可能性があります。ただし、nc はクライアントとして正常に動作しているため、私の質問は次のとおりです。
この回答は、接続のシャットダウン/クローズ時にサーバーがハングすることを説明する可能性のある nc とは何が異なりますか?
機能するものと機能しないものをまとめる:
- python クライアント & サーバーとしての nc -l: 動作します
- クライアントおよびarduinoサーバーとしてのnc:動作
- Python クライアントと arduino サーバー: サーバーがハングする
クライアントコードは次のとおりです。
import socket
def netcat(hostname, port, content):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((hostname, port))
s.sendall(content)
s.shutdown(socket.SHUT_WR)
while 1:
data = s.recv(1024)
if data == "":
break
print "Received:", repr(data)
print "Connection closed."
s.close()
編集 :
それは実際にはタイミングの問題であるようです (Vorsprung の回答で考えさせられました!)。上記のコードでシャットダウンの前にスリープ(0.5)を追加すると、すべてうまく機能します(Ctrl + Cを押す前に手動の遅延があるnetcatのように)。そのarduinoライブラリを今すぐチェックする必要があると思います...