我正在编写一个c#应用程序,我有一些表单,用户可以在其中插入其他主机中的TCP侦听器的IP地址和端口。 所以我会在继续编程之前检查是否有tcp监听器。 我不想使用connect,因为我不想在执行控制的同时连接到这些服务器。
所以举个例子 有一个听众
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?
而不是放入可用服务器列表。
答案 0 :(得分:2)
你不能以一般的方式做到这一点。无法确定是否有远程端点上的服务器套接字侦听,而不是在本地计算机上侦听,而不实际尝试连接。
请注意,这是“文件存在?”的变体。问题,并有相同的一般答案:不要那样做。
即使您可以在尝试连接之前确认是否存在远程服务器,也无关紧要,因为服务器可能会在您检查它之间以及您实际尝试连接的时间之间停止工作。
因此,您必须处理尝试连接到服务器并且无论如何都会失败的情况。事先发现并不会让事情变得更容易,而且对用户也没有太大的帮助。
如果您确实想要验证用户的输入,您实际上可以继续连接到服务器,然后立即断开连接(优雅的关闭...即呼叫Socket.Shutdown(SocketShutdown.Send)
在实际关闭/部署Socket
实例之前,等待0字节的接收完成。
但就个人而言,我只是接受用户的输入,然后如果后来证明是无效的,请让他们知道你何时发现它是。