私はサーバープログラムとクライアントプログラムを持っています。プログラムを開発している間、私は便宜のために同じマシン上でサーバーとクライアントを実行します。サーバはこれらの行を使用して着信接続を聞いて開始します:パブリック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.com(IPAddress.Parse(...)
)から公衆IPに変更しました。そのため、クライアントは同じマシン上のサーバーに接続できませんでした。例外はNo connection could be made because the target machine actively refused it <my public ip:7070>
です。
私はファイアウォールを無効にしようとしましたが、まだ動作していません。なぜサーバーは接続を拒否していますか? すべてのインターフェイスをIPAddress.Any
と聞くように具体的に言わなかったのですか?
どうして私はそれを修正しますか?
あなたのパブリックIPは、ISPから提供され、実際にルーターのアドレスです:
「client.Connect(<あなたの公開IP>、7070)」を実行しようとしていますが、例外が発生したとしますか?ルータからポート7070へのポートフォワーディングをしていない限り、これは私が期待するものです。 – adv12
@ adv12だから、私のルーターは接続を拒否していると言っていますか? – foxneSs
パブリックIPに接続できるかどうかは、ルータ/インターネットに接続された機器によって決まります。少なくとも、ポートフォワードのルールが必要です。 –