我正在尝试使客户端使用非阻塞套接字从服务器接收消息,但是,仅允许客户端每秒检查一次新消息。服务器首先将消息的大小作为整数发送,然后发送消息本身。
这是我客户端上的代码:
server = ('192.168.1.220', 4000)
buf_size = 16384
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(server)
sock.setblocking(0)
while True:
message = b''
size = None
try:
size = int(sock.recv(buf_size).decode('utf-8'))
except:
pass
if size:
while len(message) < size:
try:
data = sock.recv(buf_size)
message += data
except:
pass
if len(message) > 0:
print(message)
#time.sleep(1)
这按原样进行,但是,如果我在外部while循环(time.sleep(1)
)的末尾取消1秒延迟的注释,则客户端不再收到服务器发送的任何消息(没有错误)要么。)
为什么延迟会在这里破坏代码?我假设发送给客户端的消息将保留在流中,直到被recv()
方法读取为止。我是否误解了无阻塞套接字的工作方式?我该如何实现呢?