Пример сокета Python, почему эта программа застряла в recvfrom с UDP? - PullRequest
0 голосов
/ 19 ноября 2011

Я пытаюсь сделать простой HTTP-клиент здесь, поэтому я попытался использовать socket.sendto() и socket.recvfrom() отправлять и получать сообщения:

Итак, в моей системе включен сервер apache, привязка к порту 80:

  sock = socket (AF_INET , SOCK_DGRAM)
  sock.sendto ( 'GET /' , ( 127.0.0.1 , '80' ) )
  message , servaddr = sock.recvfrom (255) 

застрял, но nc localhost 80 с 'GET /' работает

Разве Python по умолчанию не был неблокирующим, почему я застрял здесь?

Ответы [ 2 ]

6 голосов
/ 19 ноября 2011

Вы пытаетесь получить доступ к HTTP-серверу через UDP (SOCK_DGRAM). Вместо этого используйте TCP (SOCK_STREAM). Поскольку TCP является протоколом, ориентированным на установление соединения, рассмотрите возможность использования socket.create_connection.

0 голосов
/ 27 марта 2013

Вы также можете проверить Торнадо: http://www.tornadoweb.org/

Это довольно хорошо, когда вы к нему привыкли.В исходном коде есть пример кода.

Удачи.

...