【问题标题】:How to close a socket connection of other application?如何关闭其他应用程序的套接字连接?
【发布时间】:2019-05-02 00:48:44
【问题描述】:

类似于 TCPView 可以做什么。

有没有办法在 .net 或 winapi 中做到这一点?

我需要自动化这个过程来模拟我的集成测试丢失的连接。

另外,我不能使用http://www.nirsoft.net/utils/cports.html,因为它被我的公司屏蔽了。

【问题讨论】:

标签: .net winapi


【解决方案1】:

现在,当一个程序想要创建一个套接字时,它会创建一个进程来侦听一个预定义的选择端口。

正如线程Manually close a port from commandline 中提到的,套接字绑定到创建它的进程。这意味着它会在进程终止时自动被释放。我猜 cports (你提到的程序)基本上是这样的。

现在您可以使用 Windows 中的内置程序“netstat”来获取保留端口的列表,以及保持它们打开的进程的 ID。

看看这个链接Check Open TCP/IP Ports in Windows

有多种方法可以运行程序,然后获取“标准输出”以进行进一步处理。这是一个显示Execute a Command in C#的链接。

总结:(我的直接方法是......) 从 C# 调用 netstat,从您感兴趣的端口获取 id。并调用“Taskkill /PID the_id /F”。

试一试,希望对你有用。

【讨论】:

  • 您不需要生成netstat 进程,您可以使用GetTcpTable2()GetExtendedTcpTable() 直接枚举连接和所有者PID
  • 这也是一个很好的方法。而且可能开销更​​小。
  • 这不是关于开销,而是关于正确性。 API 调用所使用的结构布局是明确定义的。 netstat 工具的布局和格式不是。没有暗示或明示的保证,后者不会更改,恕不另行通知。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
相关资源
最近更新 更多