提前,感謝您的建議。C#檢測本地主機端口使用
我目前正在使用Putty與服務器建立SSH連接的程序,該服務器使用本地端口轉發來啓用運行我的軟件的客戶端,以通過本地主機訪問SSH服務器後面的服務。
IE:客戶:20100 - >網絡 - >通過路由器/防火牆暴露遠程SSH服務器 - >本地Intranet - >內部網POP3服務器:110。
CMD線: 「油灰-ssh -2 -P 22 -L -C 20100:intranteIP:110 -pw sshpassword sshusername @ sshserver」
客戶端會使用膩子創建與SSH服務器指定一個SSH連接在連接字符串中,它希望將Intranet POP3服務器的端口110綁定到客戶端系統上的端口20100。因此,客戶端將能夠打開郵件客戶端到localhost:20100,並通過SSH隧道與內部POP3服務器交互。以上是一般性描述。我已經知道我想要做的事情會毫無問題地工作,所以我不想在上面討論。
問題是這樣的...我如何能確保本地端口(我不能使用動態端口,因此它必須是靜態的)在本地主機上不使用或通過任何其他應用程序聽了?
我目前執行此代碼在我的C#應用程序:
private bool checkPort(int port)
{
try
{
//Create a socket on the current IPv4 address
Socket TestSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Create an IP end point
IPEndPoint localIP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
// Bind that port
TestSocket.Bind(localIP);
// Cleanup
TestSocket.Close();
return false;
}
catch (Exception e)
{
// Exception occurred. Port is already bound.
return true;
}
}
我目前正在調用這個函數開始,在一個特定的端口環獲得第一個可用端口的「假」的回報。我嘗試的第一個端口實際上是由uTorrent收聽的。上面的代碼沒有捕獲這個,我的連接失敗。
什麼是確保港口真正免費的最佳方法?我明白一些其他程序可能會在測試過程中/之後抓住端口。我只需要找到一些能夠確保在測試執行時目前不在使用的東西。
如果在測試過程中有一種方法可以真正保留localhost端口,我很樂意聽到它。
知道我是否應該從膩子移動爲此,也許使用SharpSSH。任何其他良好的SSH源代碼的C#/ VB在那裏? – 2010-06-17 13:03:08