【问题标题】:Terminate existing tcp connection终止现有的 tcp 连接
【发布时间】:2011-03-07 03:49:52
【问题描述】:

有没有办法终止现有的连接??

例如 192.168.1.120 通过 8080 端口连接。

我想知道如何终止该连接?

非常感谢!

【问题讨论】:

  • 它是从你的程序内部到其他东西的连接,还是到你程序中的服务器套接字的连接,还是其他程序之间的完全外部连接?
  • @sje397 是其他程序建立的外部连接。
  • 在 linux 上你可以使用 killcx。请参阅我对“[如何在 TIME_WAIT 中强​​制关闭套接字?][1]”[1] 的回答:stackoverflow.com/questions/41602/…

标签: c++


【解决方案1】:

由于这个问题被标记为 C++(我也有同样的问题),我认为 OP 想要一个使用 Windows API 的示例。我已经使用GetTcpTable2SetTcpEntry API 完成了这项工作。您需要调用GetTcpTable2 并将结果过滤到要终止的连接,然后将其传递给SetTcpEntry。请注意,我在为 GetTcpTable2 分配内存时采取了一些捷径,因此如果您正在编写生产代码,您需要阅读 Microsoft 文档以了解如何最好地正确使用 API。

随意使用我在 Github 上根据 MIT 许可编写和发布的代码:

【讨论】:

  • 不幸的是,这只适用于 ipv4。 ipv6用什么函数?
  • 看起来有一个等效的枚举连接 (GetTcp6Table2),但不幸的是,我找不到与 SetTcpEntry 等效的 IPv6。
【解决方案2】:

最简单的方法(无需外部软件)是终止和/或重新启动正在监视该端口的进程。不过,这会终止该进程使用的每个连接,因此您通常不想在服务器上执行此操作。

要找出哪个进程正在处理您这边的连接,您可以在 Linux 中输入 netstat -anp,在 Windows 中输入 netstat -anb。请注意,在 Windows 中,netstat 在从套接字回溯到进程时可能会很慢。

如果您使用的是 Windows,并且不介意下载某些内容,请查看 SysInternals 的TCPView。让您查看打开了哪些端口,以及哪些端口正在使用它们。它甚至可以终止连接,IIRC,尽管我忘记了是通过简单地重置连接还是通过终止使用它的进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 2010-10-23
    • 1970-01-01
    • 2022-01-09
    • 2017-11-04
    • 1970-01-01
    • 2017-11-11
    • 2022-08-15
    相关资源
    最近更新 更多