2
我需要測試TCP端口是否空閒。我寫了這個方法:測試本地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有時工作,有時提供虛假答案...
如果沒有其他人有一個好主意,你可以檢查是否可以打開一個套接字到該端口。它可以給出不同的結果,具體取決於您用來引用自己的地址。 – 2013-09-26 09:36:34
其他80%的時間會發生什麼?這是非常錯誤的代碼,如果你發現它是免費的,那麼你不能保證它在一納秒之後仍然可用,另一個進程可能會打開這個端口。 Windows之後的同類邏輯沒有檢查文件是否被鎖定的功能。 –
好吧,它不能100%確定,但我需要在運行apache進程之前進行檢查。如果某些東西已經在運行並在tcp 80上偵聽,我可以獲取並停止進程。問題是爲什麼在XP有時工作,有時不工作。 – Tobia