2016-04-07 2 views
0

Я пытаюсь написать скрипт python, который будет прослушивать UDP (произвольный порт 1234) в Ubuntu MATE (работает на Odroid XU-4). Для этого я нашел код для установления соединения и связи через него с помощью модуля python socket. Код выглядит следующим образом:UDP Связь через Python не создает активное подключение к Интернету

import socket 
port = 1234 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
try: 
    s.bind(("localhost", port)) 
except socket.error , msg: 
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1] 
print 'Socket bind complete' 
print "waiting on port:", port 
while 1: 
    data, addr = s.recvfrom(1024) 
    print data 

Этот код не был написан сам, но очень прост. Запуск этого сценария через терминал не вызывает сообщений об ошибках. В соответствии с выходом создается сокет, и соединение было успешным. Беда в том, что учебник, из которого я получил это, говорит, чтобы общаться с этим скриптом, открывая клиентское соединение через новый терминал, сделает трюк. Что-то вроде:

-$ ncat localhost 1234 -u 

Снова нет сообщений об ошибках. Как только я пытаюсь отправить пакет данных (обычный текст, например, «тест»), я получаю ошибку:

Ncat: Connection refused. 

В попытке устранения неисправностей себя, я побежал отдельное окно терминала, чтобы контролировать все UDP-соединение с корневым доступом.

netstat -u 

При выполнении сценария, я предполагаю, чтобы найти порт 1234 на netstat список, но я этого не делаю. Это означает, что скрипт python не создает и не привязывает к UDP-порту 1234, но он считает, что это так.

Однако открытие того же UDP-порта с использованием netcat непосредственно через терминал.

Из этого я знаю, что проблема должна иметь какое-то отношение к скрипту python. Что может быть неправильным на стороне скрипта/питона, чтобы не установить соединение, но думайте, что это так?

Заранее благодарен!

ответ

0

Это помогает явно определить IP-адрес, к которому вы хотите подключиться. Например:

import socket 
IP = "127.0.0.1" 
port = 1234 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
try: 
    s.bind((IP, port)) 
except socket.error , msg: 
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1] 
print 'Socket bind complete' 
print "waiting on port:", port 
while 1: 
    data, addr = s.recvfrom(1024) 
    print data 

После этого подключите в качестве клиента через Netcat примерно так:

-$ ncat 127.0.0.1 1234 -u 

Это работает для меня, после того, как та же самая проблема.

1

Во-первых, вы можете проверить, открыт или закрыт порт, а затем привязаны. Это может вам помочь:

import socket; 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
result = sock.connect_ex(('xxx.xxx.xxx.xxx',1234)) 
if result == 0: 
    print "Port is open" 
else: 
    print "Port is not open" 
+0

Я только что запустил это, и порт открыт. Я сделал немного больше копания, и теперь я могу получить вариант этого кода для работы с использованием TCP, но не UDP. Я бы хотел UDP. Спасибо за предложение! –

Смежные вопросы