2016-08-18 13 views
0

私はサーバープログラムとクライアントプログラムを持っています。プログラムを開発している間、私は便宜のために同じマシン上でサーバーとクライアントを実行します。サーバはこれらの行を使用して着信接続を聞いて開始します:パブリックIPを使用してサーバーに接続できないのはなぜですか?

var listener = new TcpListener(IPAddress.Any, 7070); 
listener.Start(); 

クライアントは、これらの行(簡体字)を使用してサーバに接続します。

var client = new TcpClient(AddressFamily.InterNetwork); 
client.Connect(IPAddress.Loopback, 7070); 

私は同じマシン上でプログラムを実行するので、私はIPAddress.Loopbackを使用します。しかし、サーバーとクライアントが将来同じマシンで実行されることはないことを知って、私はhttp://icanhazip.comIPAddress.Parse(...))から公衆IPに変更しました。そのため、クライアントは同じマシン上のサーバーに接続できませんでした。例外はNo connection could be made because the target machine actively refused it <my public ip:7070>です。

私はファイアウォールを無効にしようとしましたが、まだ動作していません。なぜサーバーは接続を拒否していますか? すべてのインターフェイスをIPAddress.Anyと聞くように具体的に言わなかったのですか?

どうして私はそれを修正しますか?

あなたのパブリックIPは、ISPから提供され、実際にルーターのアドレスです:

+0

「client.Connect(<あなたの公開IP>、7070)」を実行しようとしていますが、例外が発生したとしますか?ルータからポート7070へのポートフォワーディングをしていない限り、これは私が期待するものです。 – adv12

+0

@ adv12だから、私のルーターは接続を拒否していると言っていますか? – foxneSs

+0

パブリックIPに接続できるかどうかは、ルータ/インターネットに接続された機器によって決まります。少なくとも、ポートフォワードのルールが必要です。 –

答えて

2

はここでうまくいけば正しい質問に私のコメントから構築された答えです。ルーターは、ローカルネットワーク内のコンピュータからの発信接続のネットワークアドレス変換(NAT)を行います。これらの要求は、すべてが1つのIPから来ているように見え、ルータはアドレス変換テーブルに基づいて適切なローカルコンピュータに応答を送信します。これは、発信接続では動作しますが、着信接続では機能しません。

何かがインターネットからあなたのルータにTCP接続を開こうとすると、そのトラフィックをローカルの特定のコンピュータに転送するように特に設定しないかぎり、ルータは接続しようとしているローカルコンピュータを知らないネットワーク。ポートフォワーディングが設定されていない場合、ルータは「申し訳ありませんが、ポート7070で着信要求を処理していません」と表示します。

3

開発マシンはルータの後ろにありますか?

パブリックIPアドレスを使用して送信されるネットワークトラフィックは、特定のネットワークプロトコルを介して特定のポート上のルーターに届きます。ルータは、このトラフィックをネットワーク上でどこに送信するかを知る必要があります。トラフィックはインターネットからあなたのマシンに送られ、あなたのルーターはトラフィックをコンピュータのマシンに転送することも、転送しないこともできます。

ネットワークアドレス変換(NAT)とユニバーサルプラグアンドプレイ(UPnP)のおかげで、あなたは日々の生活の中でこれを認識しません。ネットワークアドレス変換を使用すると、パブリックIPからネットワーク上の実際のマシンのIPにトラフィックをルーティングできるようにトラフィックヘッダーを変更することができます。着信トラフィックがネットワーク上の接続用ポートを開こうとすると、そのトラフィックを適切に転送するようにルータを設定する必要があります。ユニバーサルプラグアンドプレイは、最新の多くのルータでサポートされているプロトコルであり、ソフトウェアやデバイスがポートを転送する必要なくシームレスにトラフィックをルーティングできるようにします。

これは、2つのオプションであなたを残します:開発目的のために

  1. は、あなたがしている場合は特に、あなたのルータにアクセスし、より堅牢なアプリケーションのために開発マシン

  2. に必要なポートを転送します別のマシンやネットワークでこれを実行する場合は、アプリケーションにUPnP supportを追加することを検討しながら、UPnPがサポートされていないか、一部のユーザーによって有効になっていない可能性があることを理解してください。

関連する問題