【问题标题】:How to check the python socket recvfrom() data如何检查 python 套接字 recvfrom() 数据
【发布时间】:2016-08-03 07:15:03
【问题描述】:

我正在使用 python 进行套接字编程。使用 ESP python,我创建了一个到服务器的套接字并发送请求(以 API 数据包格式,根据服务器代码它将响应)。在接收套接字时,我需要检查数据(如果接收到数据,则需要继续下一个操作。如果没有,我需要再次发送请求)。 发送没问题。在接收套接字时,如果没有接收到数据,则不会进入下一条指令..请帮帮我。

代码:

try:

    s = socket(AF_INET, SOCK_DGRAM)
    print "socket created"

except socket.error:

    print "failed to create socket"
    sys.exit()

发送数据:

s.sendto("packet of data", 0, (HOST,PORT))

在接收中:

recvpack, payload=s.recvfrom(1024)

if not recvpack:

    s.sendto("packet of data", 0, (HOST,PORT))

elif(recvpack[]="packet of data"):

    pass # continue to next operations..

在上面的接收语句中,如果recvfrom()没有得到任何数据,如何检查recvpack并返回下一步操作..如果socket.settimeout()socket.setblocking()是解决方案,如何使用这些..

【问题讨论】:

    标签: python sockets recv recvfrom


    【解决方案1】:

    如果您不介意阻塞呼叫,我通常使用 settimeout 来等待消息。如果 settimeout 没有及时收到消息,它将引发异常。

    所以基本上你可以这样做:

    s.settimeout(1)
    try:
        recvpack, payload = s.recvfrom(1024)
    except error:
        recvpack = None
    if recvpack is not None:
        ...
    

    来源:https://docs.python.org/2/library/socket.html#socket.socket.settimeout

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 2015-01-09
      • 2020-11-12
      • 1970-01-01
      • 2022-11-24
      • 2018-06-10
      相关资源
      最近更新 更多