0

msdnの例を使用して、Cでwinsock2を使用して簡単なcharプログラムを作成しました。同じルーターに接続されていないコンピューターを介して(ネットワークの外部アドレスを使用して)サーバーに接続しようとしない限り、機能します。 )。

コンピューターやルーターのファイアウォールの問題ではないことは確かです。Minecraftサーバーをセットアップして外部から接続することに問題はありません。

外部IPアドレスをサーバーにバインドしようとしましたが、不可能であることがわかりました。

外部IPからの接続を許可する何らかのフラグはありますか?

4

1 に答える 1

0

サーバーソケットは、それが実行されているマシンに属する 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 に転送されます。ルータはパケット ヘッダーの調整を担当するため、パーティは相互に通信していると認識し、ルータが中間にあることを認識できません。

于 2012-06-19T04:15:54.467 に答える