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 に答える