列出网络连接,能对指定连接中止,具有netstat -ano功能,能像TcpView一样动态实时刷新。
查过很多API :NetSessionEnum;GetTcpTable;SnmpExtensionQuery;NetSessionDel....
但要能实时刷新并能中断指定IP连接,就不知道哪个更好使?特别是要能中止本机对指定IP的连接,而不关闭进程。
那位大侠有思路,能有demo学习学习更好。

解决方案 »

  1.   

      这里要指出的一点就是,绝大多数程序都是由于程序编写不完善所造成的死连接,即对 Socket 未能进行完善的管理,导致占用端口导致服务器资源耗尽。当然,很多情况下,程序可能不是我们所写,而由于程序代码的复杂、杂乱等原因所导致难以维护也是我们所需要面对的。  网上有很多文章都提到 Socket 长时间处于 CLOSE_WAIT 状态下的问题,说可以使用 Keepalive 选项设置 TCP 心跳来解决,但是却发现设置选项后未能收到效果 。  因此,这里我分享出自己的解决方案:    Windows 中对于枚举系统网络连接有一些非常方便的 API:    * GetTcpTable : 获得 TCP 连接表
        * GetExtendedTcpTable : 获得扩展后的 TCP 连接表,相比 GetTcpTable 更为强大,可以获取与连接的进程 ID
        * SetTcpEntry : 设置 TCP 连接状态,但据 MSDN 所述,只能设置状态为 DeleteTcb,即删除连接  相信大多数朋友看到这些 API ,就已经了解到我们下一步要做什么了;枚举所有 TCP 连接,筛选出本进程的连接,最后判断是否 CLOSE_WAIT 状态,如果是,则使用 SetTcpEntry 关闭。  其实 Sysinternal 的 TcpView 工具也是应用上述 API 实现其功能的,此工具为我常用的网络诊断工具,同时也可作为一个简单的手动式网络防火墙