如何获取VC ++中的自由端口号列表?

时间:2009-12-15 06:46:03

标签: c++ mfc visual-c++

如何获取VC ++中的空闲端口号列表?

另外我想检查用户定义的端口号是否空闲?

2 个答案:

答案 0 :(得分:2)

确定端口号是否“免费”的唯一方法是实际尝试bind()

回想一下,端口号仅表示特定接口地址的上下文中的内容,因此两个程序可能正在侦听“相同”端口号(但在不同的地址上)。此外,可能有许多原因可能导致特定程序无法侦听特定端口,包括本地防火墙策略或ACL,或任何其他可能的原因。

假设您想要侦听传入的连接,只需尝试bind()到感兴趣的地址和端口,您将收到错误或取消错误,具体取决于您的应用程序是否可以侦听该端口。

答案 1 :(得分:1)

(我假设你在谈论TCP / IP端口)

没有免费端口号列表。但像netstat.exe这样的实用程序(我喜欢使用netstat /a /n /p tcp)会为您提供已使用端口号的列表。空闲端口号是1到65535之间的所有端口号,包括未使用的端口号。

如果您可以通过编程方式获取使用过的端口号列表,那么问题就解决了。如果我真的很难,我会​​从netstat捕获输出并解析它。

<强>更新

(来自维基百科)http://en.wikipedia.org/wiki/Netstat

  

在Windows平台上,可以通过调用IP Helper API或IPHLPAPI.DLL中的 GetTcpTable 和GetUdpTable函数来检索netstat信息。返回的信息包括本地和远程IP地址,本地和远程端口以及(对于GetTcpTable)TCP状态代码。除了Windows附带的命令行netstat.exe工具之外,还有基于GUI的netstat程序。

维基百科文章中还有一些更有用的信息。返回的stati的一个很好的解释也在这里:http://commandwindows.com/netstat.htm