Как проверить данные сокета python recvfrom()

Я работаю над программированием сокетов в 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() это решение, как использовать эти..

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

Другие вопросы по тегам