2009-08-22 4 views
1

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

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, но безрезультатно. Здесь порт fowarding линии в моей странице маршрутизатора, если это поможет:

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

Любая идея, почему это происходит?

ответ

5

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

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

+2

Я сделал YouGetSignal, рад, что вы его нашли. =] –

1

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

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

Спасибо, что предложили шасси для пересылки портов. Очевидно, что порт 8000, похоже, заблокирован, работает ли мой TCP-сервер или нет. Я не понимаю этого, так как на моем маршрутизаторе включен порт 8000. Любая идея, почему он заблокирован? Возможно, это мой интернет-провайдер ... –