sockets - 在 Windows 中如何检测哪个程序正在监听 TCP/IP 端口?

标签 sockets tcp vb6 ip port

我继承了一个应用程序,它在端口 7001 上监听来 self 们内部测试设备的 UDP 广播,我最近更新了另一个需要做同样事情的应用程序。这两个应用程序必须能够在同一台计算机上共存。

目前,当我最近更新的应用程序尝试绑定(bind)到端口以监听 UDP 广播但失败时,它只是报告该端口不可用,并表明继承的应用程序可能正在运行。我怎样才能让我的应用程序检测到哪个应用程序实际上正在监听该端口?我已经进行了 Google 搜索,甚至搜索了该站点,但到目前为止,除了使用 Task Manager 之外我找不到任何东西。 , TCPView , 或 netstat在命令行。

我更喜欢使用 Windows API 或 Windows 系统 COM 组件的技术,因为这两个应用程序都是用 Visual Basic 6.0 编写的。 (我知道,我知道,但我必须维护这些应用程序,因为它们是关键任务。)但是,如果我在新的开发工作中需要它,.NET 解决方案也会很有用。

最佳答案

使用:

netstat -n -o

这将显示进程 ID,您可以从那里查看任务管理器的进程查看器,转到菜单 ViewColumns... 并检查进程识别码(PID)。然后就可以看到监听那个端口的进程名了。

当然,您需要一种编程方式来完成此操作,而 GetTCPTable2 API 是最佳选择,正如已经建议的那样。事实上,如果您查看 netstat.exe 的 IAT(导入地址表),它实际上使用该 API 来获取该信息。

有一种方法可以直接与命令窗口通信并使用管道获取其输出,并且可以正常工作,但理想的方法是简单地使用与 netstat 相同的 API。

关于sockets - 在 Windows 中如何检测哪个程序正在监听 TCP/IP 端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23204598/

相关文章:

Java套接字性能瓶颈: where?

c - C 中的 Telegram 客户端

haskell - 在 Haskell 中,如何在 Web 客户端断开连接时中止计算

c++ - OCX 的调试和发布版本不兼容 "Variable uses an Automation type not supported in Visual Basic"

vb6 - 带通配符的 FileSystemObject CopyFile 复制扩展名长于指定的文件

vb.net - 构建机器配置建议?

java - 如何避免阻塞 Java ServerSocket?

c++ - 关于 recv 和读取缓冲区 - C Berkeley Sockets

java - Java Socket 是否缓存 DNS?

windows - 当请求的缓冲区大小大于可用数据量时,为什么 recv 会失败?