サーバーソケットは、それが実行されているマシンに属する IP にのみバインドできます。あなたのためにそれを処理するためのバインディングINADDR_ANY
。
ネットワーク外のクライアントがそのサーバーに接続するには、クライアントはサーバー マシンではなく、ルーター自体の開いている IP/ポートに接続する必要があります。ルーターは、パブリック IP/ポートでのインバウンド接続をサーバーの IP/ポートに転送するように構成する必要があります。
たとえば、ローカル LAN IP が 192.168.0.1 のマシンのポート 12345 でリッスンするサーバー ソケットがあり、ルーターのパブリック IP が 206.152.65.1 であるとします。ソケットを 192.168.0.1:12345 にバインドしてから、ルーターのポート 12345 (または任意の使用可能なポート) を開き、そのポートを 192.168.0.1:12345 にマップするポート フォワーディング ルールを定義します。これで、外部クライアントは 206.152.65.1:12345 に接続でき、192.168.0.1:12345 上のサーバーは接続を認識します。
より一般的には、206.152.65.1:12345 宛てのネットワーク パケットは調整され、192.168.0.1:12345 に転送されます。ルータはパケット ヘッダーの調整を担当するため、パーティは相互に通信していると認識し、ルータが中間にあることを認識できません。