我写了一个TCP应用程序,但我遇到了一些问题。
当我运行TCP程序并侦听端口时,程序死机,但端口仍在监听。
我想重新启动它。它显示“System.Net.Sockets.SocektException:通常只允许每个套接字使用一次”。
所以它检查“TCPView”,我发现了侦听端口的进程,所以我试图关闭它。可悲的是失败了!
所以我想知道如何使用c#关闭特定端口。
答案 0 :(得分:0)
这引起了我在tcp服务器和客户端全天的记忆。我认为操作系统需要时间来清理崩溃或攻击性应用程序中的端口。
如果不是这种情况,可能是因为您的应用程序启动了另一个进程,即子进程。
无论如何,我认为你应该从这里的第一原则开始,如果你控制了你想要杀死的进程,那么优雅地退出这个应用程序,而不是试图杀死它。此外,如果此应用程序有一个主窗口,您可以尝试调用
p.CloseMainWindow();
p.WaitForExit();
还要确保它没有启动任何子进程,因为您“可能”也必须关闭它们。
如果您控制此应用程序,请尝试使用ReuseAddress
绑定,但这只是试图弥补糟糕的设计
允许套接字绑定到已在使用的地址。
你也可以看看assicoated socket选项
Socket.SetSocketOption Method (SocketOptionLevel, SocketOptionName, Int32)