我正在使用 c# 在 Windows 服务中使用 tcp 侦听器开发一个 tcp 服务器应用程序。
开始我的服务后,它工作正常并接受新客户。一段时间后,当新客户端尝试连接到服务器时,它会给出以下异常:
连接失败,服务器是否正在运行?由于目标机器主动拒绝,无法建立连接。
那时服务仅处于运行状态。
如何验证 tcp 服务器是否处于侦听状态?
如果您的服务器仍在运行并且尚未关闭侦听套接字,则它仍处于侦听状态。但是,如果平台是 Windows 并且您的服务器的积压队列已满,则 Windows 将拒绝进一步的连接。这意味着您的服务器接受新连接的速度很慢。
不确定您是否以编程方式表示,但对于后者,您可以尝试 telnet: telnet host port
telnet yahoo.com 80
telnet localhost 3306
等等
如果你想检查服务器是否正在监听,并且服务器是 Windows,你可以简单地使用(例如 8888 是你的监听端口)
netstat -ano|findstr "8888"
然后你会看到你的服务器实例的 PID。
另外,如果要检查TCP连接尝试失败的原因,可以使用Wireshark捕获服务器和客户端之间的所有TCP数据包,那么原因就很清楚了。
例如,如果服务器已达到打开套接字数量的限制,您将看到从客户端到服务器的 SIN,以及服务器如何响应。