2

我需要测试 TCP 端口是否空闲。我写了这个方法:

private bool freePort(int port) {
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    IAsyncResult result = socket.BeginConnect(IPAddress.Loopback, port, null, null);
    bool success = result.AsyncWaitHandle.WaitOne(1000, true);
    try{
        socket.Close();
    }catch(Exception){}
    return !success;
}

这适用于 Windows 7,但不适用于 Windows XP。

在winXP中有时有效,有时给出错误答案......

4

1 回答 1

1

确切地尝试 Apache 将尝试的可能会更好:打开端口,而不是连接到它。

using (var listener = new TcpListener(IPAddress.Loopback, port))
    listener.Start();
于 2013-09-26T12:53:04.213 回答