2014-04-21 59 views
5

我有一个应用程序,我从我们的内部测试设备监听端口7001 UDP广播,最近我更新了另一个需要做同样事情的应用程序。这两个应用程序必须能够在同一台计算机上共存。如何检测在Windows中侦听某个tcp/ip端口的程序?

当前,当我最近更新的应用程序尝试绑定到端口以侦听UDP广播并且失败时,它仅报告端口不可用并且表明继承的应用程序可能正在运行。我如何让我的应用程序检测哪个应用程序实际在该端口上侦听?我做了Google搜索,甚至搜索了这个网站,但到目前为止,除了在命令行中使用任务管理器,TCPView或netstat之外,我一直无法找到任何东西。

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

+0

GetTcpTable2可以为您提供进程ID。类似的问题在这里[链接](http://stackoverflow.com/questions/13295277/check-on-avaiable-port-using-wmi-win32-class) – user2773289

+0

不知道你是否可以使用这个或不是,但MSDN上面的一些示例代码条目位于http://msdn.microsoft.com/en-us/library/windows/desktop/bb408406(v=vs.85).aspx –

+0

您还可以通过WMI获取此信息。非常方便的东西。 – EJP

回答

2
netstat -n -o 

,将显示进程ID,并从那里你可以看在任务管理器的进程查看器,转到查看 - >列...,然后检查进程ID(PID)。然后您可以看到在该端口上侦听的进程的名称。

当然,你想要一个完成这个的程序化方法,并且GetTCPTable2 API最好是已经建议的。实际上,如果您查看netstat.exe的IAT(导入地址表),它实际上使用该API来获取该信息。

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

+0

谢谢,这应该让我在我需要的地方。我没有时间进一步讨论这个问题,但只要我有一些工作代码,我会在这里发布。 –

+0

只有'netstat --all --program | grep 8090'为我工作。只是分享。 net-tools 1.60 netstat 1.42(2001-04-15) –