0

winforms クライアント/サーバー チャット アプリケーションを作成しようとしています。私はすでにクライアントとサーバーを持っています。両方とも正常に動作しています。ログインしたり、メッセージを送信したりできます..問題は、ローカル IP に接続した場合にのみ機能することです。外部 IP でプログラムを実行しようとすると、次のエラーが発生します。

"The requested address is not valid in its context".

つまり、自分のコンピューターでサーバーを実行し、(たとえば) 3 つのクライアントを起動して、実行中のサーバーに接続させることができます。これは基本的に、私が自分自身に話していることを意味します。私がやろうとしているのは、私のコンピューターでチャットサーバーを実行し、他の人がクライアントプログラムを実行してインターネット経由でサーバーに接続できるようにすることです。

これは、外部 IP を入力したときにエラーが発生する部分です。

public void StartListening()
    {

        // Get the IP of the first network device, however this can prove unreliable on certain configurations
        IPAddress ipaLocal = ipAddress;

        // Create the TCP listener object using the IP of the server and the specified port
        tlsClient = new TcpListener(ipaLocal, 50702);

        // Start the TCP listener and listen for connections
        tlsClient.Start(); <--- THINGS GO SOUTH HERE

        // The while loop will check for true in this before checking for connections
        ServRunning = true;

        // Start the new tread that hosts the listener
        thrListener = new Thread(KeepListening);
        thrListener.Start();
    }

私がやろうとしていることが可能かどうかわかりませんか?私はそれを想像することはできませんが、これを進める方法がちょっとわかりません。私はネットワークプログラミングが初めてなので、どんな助けでも大歓迎です。

よろしく、ジェーン

4

2 に答える 2

1

サーバー アプリケーションは、指定されたローカルにインストールされた NIC 上の指定されたポートで着信接続をリッスンする必要があります。そのため、TcpListener常にローカルIP アドレスを使用して作成する必要があります。これは、どの NIC (複数インストールされている場合) を使用するかだけを気にするためです。

のMSDNページにTcpListenerも明示的に記載されています:

TcpListener コンストラクター (IPAddress, Int32) 指定されたローカルIP アドレスとポート番号で着信接続試行をリッスンする TcpListener クラスの新しいインスタンスを初期化します。

外部 IP アドレスは、TCP/IP サーバーとはまったく関係ありません。途中で多数のルーターとネットワーク デバイスを使用することができ、それらは着信接続をマシンに転送できます。

指定したポートで着信接続を許可するように、ファイアウォールとルーターが適切に構成されていることを確認してください。これを行うには、TCP/IP サーバーを起動してポートを開き、CanYouSeeMeなどのサービスを使用して、外部からサーバーにアクセスできるかどうかを確認します。

あなたのコメント(これは特定の構成では信頼できないことが証明される可能性があります)については、考えてみると明らかに「信頼できない」です.ラップトップは、Wifiネットワークアダプターとはまったく異なるIPアドレスを持つイーサネットネットワークコントローラーを簡単に持つことができます. サーバー アプリでは、取得した最初のアドレスを選択するのではなく、使用する IP アドレスをユーザーが選択できるようにする必要があります。

于 2012-05-12T18:19:37.817 に答える
1

ジェーン、

あなたの問題は、IPアドレスの設定にあると思います。これはネットワーク接続の問題です。外部クライアントが PC に接続できるようにするには、外部 IP アドレスが必要です。より高度なネットワーキングが必要です。ISP から提供された IP アドレスは、国内で使用されます。クライアントがファイアウォールの外側であなたを見つけることができるように、特別なパブリック IP アドレスが必要です。これはネットワーク/ISP/外部 IP の問題です。

于 2012-05-12T17:45:12.277 に答える