2015-12-15 2 views
2

Я очень новичок в программировании сокетов. Я пытаюсь подключиться к источнику питания через Ethernet. Мой Mac (OS X) подключен к коммутатору Ethernet, а источник питания также подключен к коммутатору. У меня есть код, написанный на python для отправки/получения команд/сообщений в/из источника питания.Python socket.error: [Errno 61] Connection failed

Интерфейс коммутатора позволяет мне назначать статический IP-источник питания. Именно этот IP-адрес используется в качестве целевого IP-адреса в следующем коде:

def __init__(self, IP_TARGET): 
     IP = IP_TARGET 
     PORT = 8080 
     self.supply = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
     self.supply.connect((IP, PORT)) 

Этот код работает без проблем. Моя следующая цель установить связь с устройством, используя следующий код:

def getDeviceInfo(self): 
     self.supply.send('some command ') 
     self.supply.recv(10) 

Используя некоторые операторы печати, я сузили проблему вплоть до RECV команды(). Ошибка send() не вызывает ошибок. Я получаю следующую ошибку

...in getDeviceInfo 
self.supply.recv(10) socket.error: [Errno 61] Connection refused 

Я могу пинговать устройство с помощью IP, что я назначенный его с помощью переключателя локальных сетей. У меня отключен брандмауэр. Я искал www для подсказки относительно того, как я могу решить эту ошибку, но безрезультатно. Есть предположения?

+0

Ты на TCP или UDP-протоколе? ... попробуйте вместо этого заменить «socket.SOCK_DGRAM' на« socket.SOCK_STREAM ». –

+0

@Iron Fist Как я понимаю UPD = 'socket.SOCK_DGRAM' и TCP =' socket.SOCK_STREAM'. я попытался сделать предлагаемое изменение и получил следующее сообщение об ошибке: терминального 'getDeviceInfo self.supply.send («некоторой команды») socket.error: [Errno 32] Сломанный pipe' – resident

+0

Я не могу точно сказать , пока вы не сообщите нам, что вы используете на стороне сервера, ваш источник питания в этом случае, это HTTP-сервер или что? –

ответ

1

Похоже, что на хосте и указанном вами порту ничего нет (вы можете проверить его с помощью nmap, например).

В таком случае он ожидает получить что-либо и ответить на него?

EDIT: ваш код не работает, потому что на удаленном хосте и указанном вами порту (8080) должен быть запущен некоторый код, прослушивание сообщений и ответ на них. Если на этом порту ничего не работает, он, очевидно, возвращает вам ошибку «Connection failed».

Другими словами, вы создали клиент, но не сервер: P

+1

Питание отображается в интерфейсе коммутатора. Порт, который я выбрал, был случайным (я думал, что что-то выше 4096 будет в порядке). Мне нужно будет узнать о nmap, прежде чем использовать его.Но чтобы ответить на последний вопрос, я не уверен, что его ждут. Я ожидал, что, отправив ему команду, я просто получил бы ответ (ясно, что у меня есть желаемые мысли). – resident

+0

Я отредактировал свой ответ, надеюсь, я лучше объяснил: D – rarguelloF

0

The port I chose was random (I thought anything above 4096 would be okay).

Смотрите Digi Connect® Family Command Reference о том, как Access the Command Line.
Интерфейс командной строки для устройства Digi использует телнет порт, который является TCP-порт 23.
(Ограничения номер порта вы, вероятно, думая о применяться только, если вы делаете сервер.)

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