私は送受信の仕組みを理解しようとしています。破損した情報を受け取っているPythonソケット
私はサーバーにデータを継続的に送信しようとしていました。私は一度に多くのデータを送信していたので、サーバーが混合バイトを受信することに気付きました。私のコードを参照してください。
サーバー:
import socket, struct
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("",1996))
server.listen(0)
c,d = server.accept()
while True:
data = c.recv(1024)
print(struct.unpack("i", data)[0])
クライアント:
import socket, struct
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.connect(("192.168.1.4",1996))
while True:
data = 1
server.send(struct.pack("i", data))
それから私はしばらくの間は、これにループを変更:
サーバー:
data = c.recv(1024)
print(struct.unpack("i", data)[0])
c.send(str.encode("Server received your message. You now can continue
sending more data"))
クライアント:
data = 1
server.send(struct.pack("i", data))
#Wait to secure the send.
server.recv(1024)
これは機能しています。 サーバーが以前の送信を受信する前に、クライアントがデータを送信しないことを確認しています。
しかし、もし私もサーバーのために同じことをしたいですか?サーバーが安全にクライアントにバイトを送信するようにするにはどうすればよいですか?
私はすでにこれを試みたと私は(私は、サーバー上で同時に送受信するために、マルチスレッドを使用)ので、無限ループを作成したことに気づく。そして、
クライアントはいくつかのデータを送っていたし、彼が再び送信できるサーバ からの信号を得るのを待っています。
サーバーは何らかのデータを受信してから、信号を送信した後、ユーザーからの信号を待ってから再度送信できます。
しかし、クライアントが実際にデータをもう一度送信していたため、すべてのことがやり直していたため、無限のトークリプライループが発生しました。
バイトを混ぜずに2つのソケット間で連続して会話するにはどうすればよいですか?