2014-04-21 91 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) –