【问题标题】:Finding the local address used on a multihomed network查找在多宿主网络上使用的本地地址
【发布时间】:2020-02-06 16:19:33
【问题描述】:

我正在运行 TCP/IP 服务器并将其绑定到 INADDR_ANY (0.0.0.0)。我的网络是多宿主的,因此有多个本地 IP 地址。因此,通过使用 INADDR_ANY,客户端可以使用这些本地地址中的任何一个连接到我。

我现在想用我的本地 IP 地址构建一个完整的 url。我会将此地址发送给客户端,并且(假设没有 NAT 穿越),客户端应该能够使用发送的地址连接到我的服务器。我可以使用什么套接字 API 来查找此地址?此地址必须在 IP 数据包中使用,因此应该是可发现的。

【问题讨论】:

标签: sockets networking tcp


【解决方案1】:

对于此类查询,没有跨平台的通用套接字 API 函数。您必须改用特定于操作系统的 API。

【讨论】:

  • getifaddrs 等会给我所有的 IP 地址,但是我需要找出当前连接到我的远程端使用的地址
  • @doron 如果客户端已经连接到您的 TCP 服务器,则 accept()getpeername() 为您提供客户端的 IP,getsockname() 在由accept() 返回的套接字上为您提供客户端连接的IP。但是如果客户端已经连接了,为什么还要给客户端发送一个 URL 来连接呢?如果客户端需要与您的服务器建立辅助连接,它可以使用之前已经使用的相同 IP。你的问题没有意义。请说明您的情况。
猜你喜欢
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2016-01-21
  • 2014-08-21
相关资源
最近更新 更多