Python默认为套接字和recv()阻塞

2024-05-01 21:49:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我在网上看到了很多关于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()

编辑:处理“不再有数据”的正确方法是什么?是将套接字设置为超时还是非阻塞;还是有别的办法


Tags: 数据代码import示例datastreamhere格式
1条回答
网友
1楼 · 发布于 2024-05-01 21:49:01

根据thisrecv可以在对等机关闭或断开连接时返回空字符串(因此为假)。换句话说,使用blockingrecv函数继续接收数据,直到对等方断开连接,然后离开循环

作为对编辑的响应:通常,如果不再发送数据,不再发送数据的机器将发送最后一条消息,告诉服务器不再接收数据,否则只需结束连接,您将获得空字符串

相关问题 更多 >