-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 回答