我对套接字编程有点陌生,对将套接字绑定到地址INADDR_LOOPBACK
或127.0.0.1
的概念感到困惑。
如果我正在编写服务器代码来侦听特定端口上的消息,并且我将一个套接字绑定到一个地址,如下面的代码示例所示...
int sd = socket( PF_INET, SOCK_DGRAM, 0 );
sockaddr_in si;
si.sin_family = AF_INET;
si.sin_addr.s_addr = inet_addr( "127.0.0.1" );
si.sin_port = htons( 9090 );
bind( sd, (sockaddr*)&si, sizeof si )
......我的问题是:谁能发送到这个套接字?
我知道与服务器进程运行在同一台PC上的其他进程可以通过使用dest_addr
参数指定127.0.0.1
执行sendto()
来访问上述套接字。
但是,如果客户端知道服务器的“实际”地址,同一网络中其他PC上的客户端是否也可以发送到该套接字?如果我在Linux PC上运行ifconfig
,我会看到一个inet
地址,例如10.138.19.27
。这是否意味着如果客户端指定了10.138.19.27
地址,则与服务器位于不同PC但位于同一网络上的客户端进程可以向服务器的套接字(绑定到127.0.0.1
)发送消息?
1条答案
按热度按时间tf7tbtn21#
只有到环回适配器(127.0.0.1)的连接,并且这些连接只能源自与侦听器相同的机器,因为其他接口有意避免舍入到该机器。
如果不绑定或绑定到INADDR_ANY(0.0.0.0),则接受来自所有接口的连接。
当您绑定到IP地址时,您只接受定向到该IP地址的连接。
127.x.x.x中的地址也是如此。
127.x.x.x的特殊之处在于只有您自己的计算机可以访问127.x.x.x地址。