如何解决 python 中 TCP 套接字中客户端的阻塞问题?

How can I solve the blocking problem on the client part in a TCP socket in python?

我有一个 TCP python 客户端,它用 C++ 向 TCP 服务器发出请求。我无权访问服务器,因此无法更改服务器部分的任何代码。 问题是有时客户端发出的请求没有收到服务器部分的任何数据,因此程序在 data = sock.recv(1024) 行中被阻塞。 所以我想知道如何解决这个问题。如果没有收到数据,我尝试在该行之后放置一个条件,但我无法通过 data = sock.recv(1024) 行。

try:
    data = sock.recv(12)  # this always gets data, it is a message send by the server that verifies the connection is alright
    print("Received: ", ":".join("{:02x}".format(c) for c in data))
    data = sock.recv(1024) 
    print("Received: ", ":".join("{:02x}".format(c) for c in data))
except IOError as e:
    pass

您需要为使用 socket.settimeout(N)socket.setdefaulttimeout(N) 的阻止操作设置超时。这样的话,如果N秒没有收到数据,操作就会失败。

第二种选择是使用 non-blocking IO