在具有1个以上IP地址的计算机上进行套接字通信

时间:2009-12-10 06:55:07

标签: networking sockets visual-c++

我有一个服务,它侦听TCP \ IP端口号上的传入连接,例如7000.此外,我的机器有超过1个NIC卡和1个以上的IP地址。(换句话说,我有2个局域网,局域网和LAN2和2 Ips)。

现在我已经配置了我的客户端应用程序(在另一台只有1个IP的机器上)来建立与我的服务器的连接,并且我将端口号设置为7000和IP,它必须尝试连接为服务器的LAN的IP1。

但是我注意到客户端无法建立连接,但是当我禁用LAN2时,我注意到客户端能够与服务器建立连接。

可能出现什么问题?

1 个答案:

答案 0 :(得分:3)

绑定端口时必须指定ip,或者可以对所有接口使用INADDR_ANY

memset(&myname, 0, sizeof(myname));
myname.sin_family      = AF_INET;
myname.sin_port        = 7000;
myname.sin_addr.s_addr = INADDR_ANY; /* all interfaces */
rc = bind(s, (struct sockaddr *) &myname, sizeof(myname));
来自MSDN

  

如果应用程序不关心什么   分配本地地址,指定   IPv4的常量值INADDR_ANY   本地地址或常量值   in6addr_any用于IPv6本地地址   在名称的sa_data成员中   参数。这允许潜在的   服务提供商使用任何   适当的网址,   可能简化应用程序   在场的编程   多宿主主机(即主机   有多个网络接口   和地址)。