C++ 我可以使用套接字连接从任何ip地址而不是特定ip地址获取连接吗?

C++ 我可以使用套接字连接从任何ip地址而不是特定ip地址获取连接吗?,c++,c,sockets,client-server,C++,C,Sockets,Client Server,我使用套接字连接来创建客户机-服务器程序。服务器代码必须等待来自客户端ip地址的连接 server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = inet_addr("192.168.1.6"); //client ip address 我可以从任何ip地址(非特定ip地址)连接到192.168.1.6吗?您指定的地址不是客户端的ip地址,而是它将要侦听的主机上接口的地址 因此,要仅在本地主机上侦听,请指定127

我使用套接字连接来创建客户机-服务器程序。服务器代码必须等待来自客户端ip地址的连接

server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("192.168.1.6");  //client ip address

我可以从任何ip地址(非特定ip地址)连接到192.168.1.6吗?

您指定的地址不是客户端的ip地址,而是它将要侦听的主机上接口的地址

因此,要仅在本地主机上侦听,请指定127.0.0.1。要侦听外部世界可以看到的外部接口,可以指定该地址

或者,您可以指定地址
0.0.0.0
,以便客户端可以通过任何可用接口进行连接


注意,虽然一开始看起来有点疯狂,但实际上只在localhost上进行监听是非常有意义的。这让你在安全性上有点“作弊”。外部用户没有尝试(而且很可能失败)自己进行安全保护,而是在您的计算机上形成一个SSH隧道,然后让他们的客户端通过该隧道连接到您的服务器。您的服务器只需做它自己的事情,并将所有身份验证、隐私等留给SSH。

看看这个:这个:您错了。绑定地址不是客户端地址,而是您正在侦听的本地地址,用于查找任何可以访问该地址的人的连接。更正。在192.168.1.1上侦听不是“仅在本地主机上侦听”。那就是在127.0.0.1上收听。它正在监听整个子网以及任何其他能够访问它的人。@user207421:Oops,当然,关于localhost的说法是正确的。监听192.168.1.1将视情况而定。如果您将网络配置为真正的主机地址,那么所有操作都将正常进行。如果(更常见的情况是)这是一个路由器的地址,那么它就根本不起作用。进行快速检查时,尝试绑定到该地址失败。