2016-08-03 29 views
0

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

代码:

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()在没有得到ANYDATA,如何检查recvpack并回到下一个操作..如果socket.settimeout()socket.setblocking()是解决方案,如何使用这些..

回答

0

如果你不介意阻塞呼叫,我通常使用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