涉及多个NIC时的IP地址

时间:2012-03-15 19:34:02

标签: tcp winsock

我正在使用Winsock编写TCP服务器应用程序。我的服务器将运行的机器和运行客户端的机器都有2个NIC。涉及的IP地址是:

  • 服务器NIC 1:192.168.132.14< - 这是我要绑定的
  • 服务器NIC 2:192.168.132.15
  • 客户端NIC 1:192.168.132.16
  • 客户端NIC 2:192.168.132.17

问题1: 在我的服务器应用程序中,如果在绑定我的侦听套接字时使用INADDR_ANY,将使用我的两个IP地址中的哪一个?我是否正确地假设没有说明,我应该使用inet_addr(“192.168.132.14”)代替INADDR_ANY?

问题2: 客户端如何控制连接到我时使用的IP地址?他会在调用connect()之前调用bind()吗?我是否有责任将他视为从任何一个地址连接(不知道哪一个),如果他不这样做?

1 个答案:

答案 0 :(得分:7)

在服务器套接字上调用listen()时,绑定到INADDR_ANY会将套接字绑定到计算机上的所有可用本地IP。这允许客户端连接到任何服务器的IP。如果服务器改为使用inet_addr(),那么这将是服务器可以接受客户端连接的唯一IP。

在客户端套接字上调用connect()时,必须指明服务器正在侦听的特定IP。如果客户端想要选择它为其连接端点绑定的本地IP,则可以在调用bind()之前调用connect()。如果客户端未绑定到特定IP,或绑定到INADDR_ANY,则套接字将使用它找到的第一个IP,该IP具有到达所连接的服务器IP的可用路由。

建立连接后,双方可以随时在各自的套接字端点上调用getsockname()getpeername(),以发现哪些IP(和端口)实际用于该连接。 / p>