Python非阻塞套接字-延迟后接收消息

时间:2020-06-24 20:10:45

标签: python sockets time network-programming nonblocking

我正在尝试使客户端使用非阻塞套接字从服务器接收消息,但是,仅允许客户端每秒检查一次新消息。服务器首先将消息的大小作为整数发送,然后发送消息本身。

这是我客户端上的代码:

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()方法读取为止。我是否误解了无阻塞套接字的工作方式?我该如何实现呢?

0 个答案:

没有答案