2014-12-10 61 views
1

我正在編寫一個c#應用程序,並且我有一些表單,用戶可以在其中插入其他主機中的TCP偵聽器的IP地址和端口。 因此,我會檢查是否有一個tcp偵聽器之前繼續該程序。 我不想使用連接,因爲我不想在執行控制的同時連接到這些服務器。檢查TcpListener是否可用於接受來自客戶端的連接而不立即連接

因此,例如 有一個聽衆

TcpListener server=new TcpListener(IP,Port); 
      server.start(); 

在客戶端應用用戶接入IP和許多聽衆的端口,我將放在一個列表,以便:

//User insert ip and port 
// PERFORM check: is there a listener at this ip and port? 

比投入可用服務器的列表。

回答

2

你不能以一般的方式做到這一點。無法確定是否存在服務器套接字在遠程端點(而不是本地計算機)上偵聽,而實際上未嘗試連接。

請注意,這是「文件存在?」的變體。問題,並具有相同的一般答案:不這樣做。

即使你能確認遠程服務器的連接嘗試之前存在,這並不重要,因爲服務器可以阻止你檢查它的時間之間的工作和時間,你居然嘗試連接。

因此,您必須處理您嘗試連接到服務器並且無論如何失敗的場景。提前發現並不會讓事情變得簡單,而且它也不會真正幫助用戶。

如果你真的來驗證用戶的輸入,可以在事實上繼續前進,連接到服務器,然後立即斷開(優美封...即叫Socket.Shutdown(SocketShutdown.Send),等待0字節接收在實際關閉/處理Socket實例之前完成)。

但我個人,我只是接受用戶的輸入,然後如果以後事實證明是無效的,讓他們知道當你真正發現它。