2016-08-03 2 views
0

나는 파이썬에서 소켓 프로그래밍을하고있다. ESP 파이썬을 사용하여 서버에 소켓을 생성하고 요청을 보냅니다 (서버 패킷에 따라 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() 경우 애니을받지에서, 어떻게 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

그래서 기본적으로 당신이 뭔가를 할 수 있습니다

관련 문제