C#终止不存在的进程

时间:2018-04-27 05:01:12

标签: c#

我写了一个TCP应用程序,但我遇到了一些问题。

当我运行TCP程序并侦听端口时,程序死机,但端口仍在监听。

我想重新启动它。它显示“System.Net.Sockets.SocektException:通常只允许每个套接字使用一次”。

所以它检查“TCPView”,我发现了侦听端口的进程,所以我试图关闭它。可悲的是失败了!

enter image description here

TCP视图 - 不存在 enter image description here

尝试通过cmd杀死进程 - 失败 enter image description here

所以我想知道如何使用c#关闭特定端口。

1 个答案:

答案 0 :(得分:0)

这引起了我在tcp服务器和客户端全天的记忆。我认为操作系统需要时间来清理崩溃或攻击性应用程序中的端口。

如果不是这种情况,可能是因为您的应用程序启动了另一个进程,即子进程。

无论如何,我认为你应该从这里的第一原则开始,如果你控制了你想要杀死的进程,那么优雅地退出这个应用程序,而不是试图杀死它。此外,如果此应用程序有一个主窗口,您可以尝试调用

p.CloseMainWindow();
p.WaitForExit();

还要确保它没有启动任何子进程,因为您“可能”也必须关闭它们。

如果您控制此应用程序,请尝试使用ReuseAddress绑定,但这只是试图弥补糟糕的设计

  

允许套接字绑定到已在使用的地址。

你也可以看看assicoated socket选项

Socket.SetSocketOption Method (SocketOptionLevel, SocketOptionName, Int32)

SocketOptionName Enumeration