我想了解发送和接收如何工作。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)
这是行得通的。我确保客户端在 服务器已经收到之前的发送之前不会发送数据。
但是如果我想为服务器也做同样的事情呢?我怎样才能确保服务器将以安全的方式发送字节到客户端?
我已经尝试过这一点,我注意到,我创建了一个无限循环,因为(我用多线程,以便发送,并在同一时间在服务器上接收):
客户端已发送一些数据,然后等待从服务器 获得他可以再次发送的信号。
服务器正在获取一些数据,然后发送信号,然后等待用户发出的信号,他可以再次发送。
但是因为客户端实际上是重新发送数据,整个事情又一次发生,这导致我无尽的谈话 - 回复循环。
那么我能做些什么来使两个套接字之间的连续对话不混合在一起?