C++ 检查C/C+中的开放端口+;

C++ 检查C/C+中的开放端口+;,c++,c,sockets,network-programming,C++,C,Sockets,Network Programming,关于验证套接字端口的可访问性和可访问性这一主题,一直存在争议 如何在C/C++中寻找一个动态监听的端口 我试图完成的基本过程是: 客户端启动 客户端找到打开的端口XYZ并侦听它 客户端通过UDP数据报将基本的“我在这里”消息传输到带有端口信息的服务器 客户端和服务器可以通信 我知道,如果您选择任意端口号并尝试使用它,您可以完成类似的任务。如果失败,则增加该数字并重试,直到获得成功的“绑定” 有没有更优雅的方法?这似乎有点骇人。如果绑定到端口0,将分配一个随机端口。然后可以使用getsocknam

关于验证套接字端口的可访问性和可访问性这一主题,一直存在争议

如何在C/C++中寻找一个动态监听的端口

我试图完成的基本过程是:

  • 客户端启动
  • 客户端找到打开的端口XYZ并侦听它
  • 客户端通过UDP数据报将基本的“我在这里”消息传输到带有端口信息的服务器
  • 客户端和服务器可以通信
  • 我知道,如果您选择任意端口号并尝试使用它,您可以完成类似的任务。如果失败,则增加该数字并重试,直到获得成功的“绑定”


    有没有更优雅的方法?这似乎有点骇人。

    如果绑定到端口0,将分配一个随机端口。然后可以使用getsockname()查找实际使用的端口。

    这样就可以了。但是Sean,不要在UDP消息中发送端口号。那会让纳特崩溃的。只要让服务器响应消息到达的端口即可。@Zan NAT不会成为问题。它只在同一网段上的元素之间使用。+1当客户端处于被动模式时,FTP服务器也会使用它。在消息中发送端口号会破坏NAT防火墙后面的客户端,所以不要这样做。只需让服务器使用消息来自的端口即可。@David Windows,但希望它最终也能移植到linux。