Не удается подключиться к серверу извне, используя библиотеку Twisted в Python - PullRequest
1 голос
/ 22 августа 2009

Я пытаюсь запустить простой TCP-сервер на моем сервере. Я использую echoserv.py и echoclient.py на странице Twisted examples . Когда я запускаю echoserv.py на сервере, я могу нормально подключиться, используя следующую команду в echoclient.py:

reactor.connectTCP('localhost', 8000, factory) <- for a localhost connection
reactor.connectTCP('192.168.0.250', 8000, factory) <- for a lan connection

но когда я пытаюсь подключиться удаленно через Интернет, я использую следующую строку в echoclient.py:

reactor.connectTCP('mydomain.com', 8000, factory)

Однако, когда я пытаюсь запустить echoclient.py, возникает пауза, и я получаю:

connection failed: User timeout caused connection failure.

Я знаю, что он что-то делает с моим доменом, потому что когда я делаю случайный домен, я получаю:

connection failed: Connection was refused by other side: 111: Connection refused.

Все мои порты настроены правильно для порта 8000, и я уверен, что это не мой провайдер, блокирующий порты (я могу использовать случайные порты все время с другими приложениями). Я также пытался использовать порты, кроме 8000, но безрезультатно. Вот строка с указанием портов на моей странице маршрутизатора, если это поможет:

[X] tcp_server            192.168.0.250 TCP 8000/8000    always   edit delete

Есть идеи, почему это происходит?

Ответы [ 2 ]

4 голосов
/ 22 августа 2009

Когда вы программируете свой маршрутизатор на переадресацию исходящих подключений к вашему входящему серверу, он на самом деле работает только в том случае, если клиенты (те, кто пытается подключиться) действительно находятся за пределами вашей сети, действительно из облака. Вы, из своей сети, не можете использовать его, он не будет работать для вас. У вас будет ощущение, что это не работает, но это так. По крайней мере, для тех, кто снаружи.

Найдите Port Forwarding Tester в Google , чтобы получить подтверждение этому. Этот (первый результат Google) работает довольно хорошо: http://www.yougetsignal.com/tools/open-ports/

1 голос
/ 22 августа 2009

Вы пробовали следующее?

  1. Выполните сканирование порта по IP-адресу компьютера, на котором запущен сервер, чтобы убедиться, что порт открыт. Простой [поиск Google] [1] даст вам множество вариантов.
  2. Если показано, что порт открыт, попробуйте удаленное соединение через telnet вместо витого клиентского скрипта. Некоторые системные брандмауэры блокируют уровень приложений (например, Windows XP) и могут блокировать исходящее соединение, даже если вы этого не понимаете.
...