Python でソケットを使用して、組み込みデバイスに対して非常に単純な読み取り/書き込みを実行しようとしています。何らかの理由で、sock.recv() コマンドが、予期した戻り文字列ではなく、送信した文字列を返しています。ソケットを開く方法は次のとおりです。
HOST1 = '192.168.1.201'
PORT1 = 4998
sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST1, PORT1))
while (1):
sock.sendall("getstate,1:1\r")
state1 = sock.recv(32)
sock.sendall("getstate,1:2\r")
state2 = sock.recv(32)
print "states:", state1, state2
予期される戻り文字列 (state1 または state2) は、現在のデバイスの状態であり、"state,1:1,0" (オフ) または "state,1:1,1" (オン) の形式です。ただし、返される文字列ではなく、独自のコマンド (「getstate..」コマンド) が頻繁に返されます。sock.sendall() は送信バッファをクリアすると思いましたか? 私はソケットの初心者なので、助けていただければ幸いです。私はこれについてかなり広範囲に検索しましたが、同じ問題を抱えている人を見つけることができません。リモート デバイスを手動でテストしたところ、期待される戻り文字列が常に返されたので、問題はソケットの使用方法にあるに違いないと考えています。