关于socket通讯中127.0.0.1的认识
通常刚开始写socket代码的童鞋经常会在地址里面填上127.0.01如:
mAddrSelf.sin_family = AF_INET; mAddrSelf.sin_addr.s_addr = inet_addr("127.0.0.1"); mAddrSelf.sin_port = htons(port);
但是最近我写一个程序的时候用127.0.0.1时如果连接本机的ip(192.168.1.143)时就会被拒绝错误代码(10061),当时我很纳闷于是把代码改成:
mAddrSelf.sin_family = AF_INET; mAddrSelf.sin_addr.s_addr = INADDR_ANY; mAddrSelf.sin_port = htons(port);
然后就好了,于是上网搜了一下关于127.0.0.1的描述:
127.0.0.1
本机地址,主要用于测试。用汉语表示,就是“我自己”。在Windows系统中,这个地址有一个别名“Localhost”。寻址这样一个地址,是不能把它发到网络接口的。除非出错,否则在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包。
网络地址127是一个保留地址,用于网络软件测试以及本地机进程间通信,叫做回送地址(loopback address)。无论什么程序,一旦使用回送地址发送数据,协议软件立即返回之,不进行任何网络传输。
根据上面的描述,我认为127.0.0.1是在本机内部使用的,如果用正常的本机ip(192.168.1.143)就会到局域网中寻址,然后查询端口。说白了这两个ip就不在一个空间。