我目前正在调试使用套接字连接客户端的服务器应用程序。当我关闭应用程序时,要么优雅地包含socket.Close()或强制通过visual studio或通过终止进程,端口保持绑定并仍然报告为侦听,如TCPView,命令提示符中的netstat和AnVir所确认的任务管理器,所有显示端口仍然绑定到我选择的端口,并指示它仍在主动侦听连接。我提到的所有工具都没有列出与连接相关的进程。
尝试通过TCPView,AnVir或任何其他工具强行关闭连接没有任何效果。我可以解除绑定的唯一方法是完全注销Windows或重新启动PC。
当我的应用程序退出时,如何确保端口未绑定?不应该socket.Close()来处理这个吗?
答案 0 :(得分:0)
我不想回答我自己的问题,但似乎我偶然发现了一些解决这个问题的方法。经过深思熟虑之后,我决心突发奇想,确保我没有需要下载的任何Windows更新(我在Windows 7上),并发现了几个可用于.NET的更新(即&# 39; Windows 7上的Microsoft .NET Framework 3.5.1安全更新...')。
我允许那些下载和安装,并发现,一旦完成,当我运行我的应用程序然后使用socket.Close()正常关闭它时,我发现端口立即变为空闲!我还测试了让服务器开始监听端口,然后通过“停止调试”强行关闭应用程序。视觉工作室中的按钮,发现端口也自动关闭。
也许这是一个由更新修复的错误,或者可能是由于更新安装的文件巧合地覆盖了一些错误。无论哪种方式,似乎我写的代码不是一些问题,socket.Close()可以再次受到信任!