-1

.Net の TcpClient を使用すると、接続が確立できるかどうかをテストできます。そのため、リモート ポートが開いているかどうかを教えてください。

このコードを確認してください:

TcpClient tcpCLient = new TcpClient();
        try
        {
            tcpCLient.Connect("www.google.com", 80);
            Console.WriteLine("Yes");
            Console.ReadLine();

        }
        catch (Exception)
        {

            Console.WriteLine("No");
            Console.ReadLine();
            throw;
        }

www.google.com の TCP ポート 80 をテストしましたが、開いているため、コンソールに「はい」というメッセージが表示されます。ここで、閉じている www.google.com の TCP ポート 70 を試します。

 TcpClient tcpCLient = new TcpClient();
            try
            {
                tcpCLient.Connect("www.google.com", 70);
                Console.WriteLine("Yes");
                Console.ReadLine();

            }
            catch (Exception)
            {

                Console.WriteLine("No");
                Console.ReadLine();
                throw;
            }

例外が発生することが予想されたので、コンソールに「いいえ」と表示されるはずです。なぜ何も起こらないのですか?ありがとうございました!!

更新: コンソールは、数分後もこの状態を維持します。 ここに画像の説明を入力

4

2 に答える 2

0

要するに:あなたがそれを捕まえたらなぜあなたはthrow例外ですか?

タイムアウトを待機しているため、これがコンソールアプリのハングの原因である可能性があります。さらに、前述のように、通話が切断される可能性があるため、リモートアドレスのファイアウォールである可能性があります。他の特定の例外が発生した場合は、お知らせください。

さらに、クライアントが接続しようとしているときの一般的な例外であるため、コードがソケット例外を処理していることを願っています。これは関連する投稿です-C#SocketExceptionはキャッチされません

于 2013-01-08T01:45:30.400 に答える
0

@pm100コメントで答えてください。

「理由はほぼ間違いなくグーグルファイアウォールによるものです。予期しないポートのパケットをドロップします。これは送信エラーのように見えるため、再試行します。ファイアウォールのないマシン(ローカルホストなど)で同じテストを試してみてください。ホストが原因ですぐに失敗します。閉じたポートへの要求を拒否します"

数分後、「いいえ」が表示されます。

于 2013-01-08T01:50:43.790 に答える