2016-08-03 6 views
0

Ich arbeite an Socket-Programmierung in Python. Mit ESP Python habe ich einen Socket zum Server erstellt und eine Anfrage gesendet (im API-Paket-Format, je nach Server-Code wird es antworten). Im empfangenden Socket muss ich die Daten überprüfen (wenn Daten empfangen werden, müssen sie mit der nächsten Operation fortfahren. Wenn nicht, muss ich die Anfrage noch einmal senden). Senden ist in Ordnung. Wenn es keine Daten empfängt, geht es beim Empfangen des Sockets nicht zur nächsten Anweisung. Bitte helfen Sie mir.Wie überprüft man den Python-Socket recvfrom() Daten

Code:

try: 

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

except socket.error: 

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

Senden von Daten:

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

In Empfang:

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.. 

In der obigen Empfang Aussage, wenn recvfrom() in nicht anydata bekommen, wie recvpack zu überprüfen und zurück zu den nächsten Operationen .. Wenn socket.settimeout() oder socket.setblocking() ist die Lösung, wie man diese benutzt.

Antwort

0

Wenn Sie einen blockierenden Anruf nicht stören, verwende ich normalerweise settimeout, um auf eine Nachricht zu warten. settimeout löst eine Ausnahme aus, wenn es keine Nachricht rechtzeitig empfängt.

Also im Grunde könnte man so etwas tun:

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

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

Verwandte Themen