IP地址127.0.0.1和0.0.0.0的区别

一直以来都以为 127.0.0.1 和 0.0.0.0 都是表示本机IP 地址,直至上一次在C# 中写一个UDP 通信的程序时遇到了问题。

先上代码:

// 实名发送
IPEndPoint localIpep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 25555);     // 本机IP,指定的端口号                                                                                           
udpcSend = new UdpClient(localIpep);
//
string message = "this is a UDP message";
byte[] sendbytes = Encoding.Unicode.GetBytes(message);
IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Parse("192.168.1.x"), 10000); // 发送到的IP地址和端口号
udpcSend.Send(sendbytes, sendbytes.Length, remoteIpep);

上面的代码在执行到udpcSend.Send() 时会抛出异常:System.Net.Sockets.SocketException:“向一个无法连接的网络尝试了一个套接字操作。”

原因分析:

导致异常的地方,就是在指定本机IP 地址和端口号 localIpep 的值时,不能用127.0.0.1,而应该是0.0.0.0。

127.0.0.1是回送地址,协议立即返回不进行任何网络传输。

https://blog.csdn.net/u012814696/article/details/55098249

127.0.0.1 是一个环回地址,并不表示“本机”。0.0.0.0才是真正表示“本网络中的本机”。

在实际应用中,一般我们在服务端绑定端口的时候可以选择绑定到0.0.0.0,这样我的服务访问方就可以通过我的多个ip地址访问我的服务。 比如我有一台服务器,一个外网地址A,一个内网地址B,如果我绑定的端口指定了0.0.0.0,那么通过内网地址或外网地址都可以访问我的应用。但是如果我之绑定了内网地址,那么通过外网地址就不能访问。 所以如果绑定0.0.0.0,也有一定安全隐患,对于只需要内网访问的服务,可以只绑定内网地址。

上述代码是UDP 的客户端,也是一样的道理。


版权声明:本文为enzochan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。