我在网上看到了很多关于socket recv()的示例,它们遵循以下格式:
来自here的示例
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 50000))
s.listen(1)
conn, addr = s.accept()
while 1:
data = conn.recv(1024)
if not data:
break
这里的代码没有将套接字设置为非阻塞;它也没有设置超时。我的理解是recv()
在默认情况下是阻塞的。如果是这样,代码是如何到达break
的,因为如果没有数据,那么它将停留在recv()
上
编辑:处理“不再有数据”的正确方法是什么?是将套接字设置为超时还是非阻塞;还是有别的办法
根据this,
recv
可以在对等机关闭或断开连接时返回空字符串(因此为假)。换句话说,使用blockingrecv
函数继续接收数据,直到对等方断开连接,然后离开循环作为对编辑的响应:通常,如果不再发送数据,不再发送数据的机器将发送最后一条消息,告诉服务器不再接收数据,否则只需结束连接,您将获得空字符串
相关问题 更多 >
编程相关推荐