私はPythonサーバーからPythonクライアントにソケット経由でマウス座標を送信します。マウスの動きのイベントがサーバー上で捕捉されるたびに、マウス座標が送信されます。これはかなり頻繁に(1秒間に12回程度)意味します。Pythonソケットrecv()は、あまりにも速すぎるとすべてのメッセージを取得しません。
問題は、別のホストでpythonサーバーとpythonクライアントを使用するときです。その後、メッセージの一部のみがクライアントに配信されます。例: 3つの最初のメッセージが配信され、4つのメッセージが配信されず、4つのメッセージが配信されます。
サーバとクライアントが同じホスト(ローカルホスト)にある場合はすべて問題ありません。
サーバーとクライアントが異なるホスト上にある場合はすべて問題ありませんが、Pythonクライアントではなく、標準のWindows Telnetクライアントを使用してサーバーからメッセージを読み取ります。
私は、送信される各メッセージの間にtime.sleep(0.4)ブレークを使用すると、すべてのメッセージが配信されることに気付きました。問題はそのような遅れではなくリアルタイムでその情報を必要とすることです。ソケットを使ってPythonでそれを実現することは可能ですか? Pythonクライアントコードの下
私が使用している:
import pickle
import socket
import sys
host = '192.168.1.222'
port = 8888
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
print "Faile. Error:" + str(msg[0]), "Error message : " + msg[1]
sys.exit()
mySocket = socket.socket()
mySocket.connect((host,port))
while 1:
data = mySocket.recv(1024)
if not data: break
load_data = pickle.loads(data)
print 'parametr x: ' + str(load_data[0])
print 'parametr y : ' + str(load_data[1])
mySocket.close()
あなたは正しいです!私はただちにチェックをしました。そして、私は、配信されたメッセージの一部だけを読むことが判明しました。あなたが述べたように、いくつかのメッセージは連結され、私はそれらを正しく読まない。 'pickle.loads'はどんな例外も投げなかったので、私を騙しました。今私はそれらをすべて読む方法を理解する必要があります。 – michal2616
OPはすべてのデータが確実に送信されるように['socket.sendall()'](https://docs.python.org/2/library/socket.html#socket.socket.sendall)を試すことができます。 – mhawke