2014-12-10 58 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实例之前完成)。

但我个人,我只是接受用户的输入,然后如果以后事实证明是无效的,让他们知道当你真正发现它。