【问题标题】:Checking for open ports in C/C++检查 C/C++ 中的开放端口
【发布时间】:2011-03-04 15:58:07
【问题描述】:

关于验证套接字端口的可访问性和可访问性的主题已经有otherquestions。

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

我要完成的基本过程是这样的:

  1. 客户端启动
  2. 客户端找到打开的端口 XYZ 并监听它。
  3. 客户端通过 UDP 数据报将基本的“我在这里”消息发送到带有端口信息的服务器
  4. 客户端和服务器可以通信。

我知道如果你选择一个任意的端口号并尝试binding,你可以完成这样的事情。如果失败,请增加数字并重试,直到成功“绑定”。

有没有更优雅的方法来做到这一点?这似乎有点骇人听闻。

【问题讨论】:

  • 在消息中发送端口号会破坏 NAT 防火墙后面的客户端,所以不要这样做。只需让服务器使用消息到达的端口即可。
  • @David Windows 现在,但希望它最终也能移植到 linux。

标签: c++ c sockets network-programming


【解决方案1】:

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

【讨论】:

  • 那行得通。但是 Sean,不要在 UDP 消息中发送端口号。那会破坏NAT。只需让服务器响应消息到达的端口即可。
  • @Zan NAT 不会成为问题。它只会在同一网段的元素之间使用。
  • +1 当客户端处于被动模式时,FTP 服务器也使用它
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
相关资源
最近更新 更多