【发布时间】:2018-09-16 15:10:11
【问题描述】:
我正在编写 python 代码来发送和接收数据,使用 TCP 连接。但是我有一个问题,我觉得很困惑。当我在服务器套接字上调用一次 recv 方法然后发送时,它工作正常。但是,当我在服务器套接字上调用 recv 方法两次然后发送时,客户端不会从服务器接收任何内容,而是挂起。
这是服务器代码:
server = socket.socket()
server.bind(('0.0.0.0', 9999))
server.listen(5)
while True:
client, addr = server.accept()
client.recv(1024)
# works if the line below is commented out
client.recv(1024)
client.send(b'ACK!')
client.close()
这是客户端代码:
client = socket.socket()
client.connect(('127.0.0.1', 9999))
client.send(bytes(sys.stdin.read(), encoding='utf-8'))
print(client.recv(4096).decode('utf-8'))
实际上,我计划在服务器代码中使用带有 recv 方法的循环。但是如果多次调用recv 方法,send 方法就不起作用。为什么会这样?
【问题讨论】:
-
服务器端
client.recv(1024)可能被阻塞等待数据。你预计会发生什么? -
@JamesKPolk 我希望服务器接收所有数据(因此第二次调用
recv将不会收到任何数据)然后发送数据。但正如您所说,服务器可能正在等待recv的第二次调用中的数据。我想我可能需要使用settimeout。谢谢你的回答。
标签: python python-3.x sockets tcp