1

サーバーで単純な TCP サーバーを実行しようとしています。Twisted の例のページで echoserv.py と echoclient.py を使用しています。サーバーで 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 用に正しく構成されており、ISP がポートをブロックしていないことは確かです (他のアプリケーションで常にランダムなポートを使用できます)。8000 以外のポートも使用してみましたが、役に立ちませんでした。これが役立つ場合、ルーターページのポートフォワーディング行は次のとおりです。

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

なぜこれが起こっているのですか?

4

2 に答える 2

4

受信サーバーへの外部接続をポート転送するようにルーターをプログラムすると、実際には、クライアント (接続しようとしているクライアント) が実際にはネットワークの外にあり、実際にはクラウドから来ている場合にのみ機能します。ネットワーク内からは、それを使用できません。機能しません。機能していないと感じるかもしれませんが、機能しています。少なくとも外部の人にとっては。

それを証明するには、Google で Port Forwarding Tester を検索してください。これ(Googleの最初の結果)はかなりうまく機能しています:http://www.yougetsignal.com/tools/open-ports/

于 2009-08-22T04:12:30.410 に答える
1

次のことを試しましたか?

  1. サーバーを実行しているマシンの IP でポート スキャンを実行して、ポートが開いていることを確認します。簡単な [Google 検索][1] で、多くのオプションが得られます。
  2. ポートが開いていることが示されている場合は、ツイスト クライアント スクリプトの代わりに telnet 経由でリモート接続を試してください。一部のシステム ファイアウォールはアプリケーション レベル (Windows XP など) をブロックし、知らないうちに発信接続をブロックしている可能性があります。
于 2009-08-22T04:20:12.377 に答える