C#检查端口是否打开

时间:2017-02-25 14:40:03

标签: c# multithreading port

我正在寻找一段代码,用于检查端口是否已启动。我知道关于这个主题还有其他问题,但是它们有一些问题。他们很慢。如果端口未打开,则冻结我的应用约5-6秒。

我找到的代码(和编辑过的):

public static bool IsServerOnline()
{
    try
    {
        using (var client = new TcpClient())
        {
            var result = client.BeginConnect(SIMPLE_CONFIG.IP, SIMPLE_CONFIG.PORT, null, null);
            // [declaration in SIMPLE_CONFIG.cs] SIMPLE_CONFIG.TIMEOUT = new Timespan(0,0,1); it should be 1 second
            var success = result.AsyncWaitHandle.WaitOne(new TimeSpan(0,0,SIMPLE_CONFIG.TIMEOUT));
            if (!success)
            {
                return false;
            }

            client.EndConnect(result);
        }

    }
    catch
    {
        return false;
    }
    return true;
}

如果端口已启动,它会立即返回true,但如果没有,它会冻结应用程序几秒钟,即使我设置超时1秒(这似乎不起作用)

0 个答案:

没有答案