【问题标题】:How can I solve the blocking problem on the client part in a TCP socket in python?如何解决python中TCP套接字中客户端部分的阻塞问题?
【发布时间】:2019-08-23 11:23:59
【问题描述】:

我有一个 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

【问题讨论】:

    标签: python python-3.x sockets tcp client


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-15
      • 2017-04-18
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 2013-10-24
      • 2016-03-18
      • 2012-10-13
      相关资源
      最近更新 更多