我正在使用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()
是解决方案,如何使用这些..
答案 0 :(得分: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