3

C# で単純な Hello World TCP/IP クライアント サーバー アプリを作成していますが、クライアントを接続できません。誰でも追加のトラブルシューティング手順を提供できますか? アイデアが枯渇し始めている...

コードの関連セクションは次のとおりです。

サーバ:

Console.Out.WriteLine("About to bind address");
IPAddress ipAd = IPAddress.Parse("127.0.0.1"); 
Console.Out.WriteLine("Choose a port to bind...");

String port = Console.In.ReadLine();
int iPort = Int32.Parse(port);

TcpListener myList = new TcpListener(ipAd, iPort);

myList.Start();

Console.WriteLine("The server is running at: "+myList.LocalEndpoint);
Console.WriteLine("Waiting for a connection.....");

Socket s = myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);

クライアント:

Console.Out.WriteLine("enter address: ");
string address = Console.In.ReadLine();
Console.Out.WriteLine("enter port: ");
int port = Convert.ToInt32(Console.In.ReadLine());

TcpClient tcpclnt = new TcpClient();
Console.WriteLine("Connecting.....");

Console.Out.WriteLine("Address: " + address + ":" + port);
tcpclnt.Connect(address, port);

クライアント マシンからサーバーに ping を実行できますが、バインドされたポートを使用してサーバーに telnet で接続できません。私はさまざまなポートを試しました (いくつかは 8000 代前半で、いくつかは 40000 前後です)。両方のシステムで Windows ファイアウォールを無効にしました。システムは、インターネット上にないルーターに接続されています。指定されたポートで着信要求をサーバーマシンに転送するようにポート転送を設定して、または設定せずに試しましたが、効果はありませんでした。

私がトラップできた唯一の例外は、クライアントによってスローされます。

ターゲット マシンがアクティブに拒否したため、接続できませんでした。

を確認しましたInnerExceptionが、何もないようです。これが基本的な例外です。それは正しいでしょうか?

他に何を見ればよいかわからない - 追加のトラブルシューティング手順が役立つ場合があります。

ありがとう!

4

5 に答える 5

9

私は前にこれに遭遇しました。0.0.0.0トリックは、ではなくにバインドすることです127.0.0.1。サーバーにバインドすると127.0.0.1、localhost からの接続のみが受け入れられます。それにバインドする0.0.0.0と、すべてのリクエストが受け入れられます。

また、クライアントからホスト マシンをnmapし、どのポートが開いているかを確認することもできます。

EDIT:マシンのIPアドレスをハードコーディングすると、リスナーはそのネットワークインターフェースでのみリッスンします。0.0.0.0リスナーを使用すると、使用可能なすべてのネットワーク インターフェイスでリッスンします。これには、コンピュータと USB 接続のハンドヘルド デバイス、2 番目のネットワーク カード、または VPN リンクとの間のインターフェイスが含まれます。

于 2009-02-13T18:39:24.270 に答える
6

上記のコードは、ループバック アドレスからのリクエストをリッスンしています。これは事実上、そのネットワーク上の接続のみをリッスンし、そのネットワークにはマシンのみが含まれます。

接続元のネットワークにバインドされたアドレスを聞いてみましたか? ローカル ネットワークでは、192.168.xx または 10.xxx のようになります。

于 2009-02-13T18:35:57.650 に答える
3

マシンで試しnetstat -alて (正確なコマンド ラインは Windows と UNIX で異なります)、サーバーがポートでリッスンしているかどうかを確認します。

于 2009-02-13T18:35:04.860 に答える
1

.NET リモート処理を使用しないのはなぜですか? TCP/IP クライアント サーバーを実行するよりも優れています。オブジェクト間でメッセージを渡すことができます。

于 2009-02-13T18:38:16.800 に答える
1

接続が最初に行われることを確認するために、同じマシン上でクライアント サーバーを実行してみましたか? それを超えて、サーバーを実行しているマシンのルーター割り当てまたは静的 IP を使用するか、ループバックにバインドしてみてください。

于 2009-02-13T18:38:45.410 に答える