我有一个服务,它侦听TCP \ IP端口号上的传入连接,例如7000.此外,我的机器有超过1个NIC卡和1个以上的IP地址。(换句话说,我有2个局域网,局域网和LAN2和2 Ips)。
现在我已经配置了我的客户端应用程序(在另一台只有1个IP的机器上)来建立与我的服务器的连接,并且我将端口号设置为7000和IP,它必须尝试连接为服务器的LAN的IP1。
但是我注意到客户端无法建立连接,但是当我禁用LAN2时,我注意到客户端能够与服务器建立连接。
可能出现什么问题?
答案 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成员中 参数。这允许潜在的 服务提供商使用任何 适当的网址, 可能简化应用程序 在场的编程 多宿主主机(即主机 有多个网络接口 和地址)。