计算机的本机真实IP地址和通用的127.0.0.1有何本质的区别?
计算机的本机真实IP地址和通用的127.0.0.1有何本质的区别?
我在调试一个服务器软件的时候发现一个奇怪的现象。
这个服务器直接用winsock编写,服务器接受windows传入的网络事件,完成接收客户机指令并且向客户机传回指定文件的功能,为了调试方便,协议基本上沿用http的协议,也就是调试的时候客户机直接用IE代替,服务器相当于WWW服务器,准备调试好了再修改成一个专门的系统。
就是这样一个准www服务器,由于调试的时候服务器和IE是运行在同一台计算机上面的,于是发现在一些计算机上,如果用127.0.0.1访问服务器,服务器最多接受两个来自127.0.0.1的连接,第三个连接发出后服务器根本得不到windows传入的网络事件,当然也就不可能响应了。一旦原有的两个连接有一个结束了,第三个来自127.0.0.1的连接事件才会传入我的服务器(也就是说,前面windows好像冷藏了这些事件而不是丢失了这些事件)。
我以为我的软件有问题,于是在程序线程中加了很多延时,或者Application->ProcessMessages()。不过都没有解决问题。奇怪的是这个现象只在比较快的计算机上发生。
我在4台计算机上尝试运行,c2.4+winxp、c2.0+winxp、c2.0+winme都有这个问题,唯独一台p][+winxp的,无论有多少个来自127.0.0.1的网络事件都会准确无误的传入我的服务器软件。
不过,后来我发现,如果用本机真实IP地址来访问,上述计算机都没有问题.譬如本机分配ip为10.0.0.3,如果用http:\\10.0.0.3访问的话,我不用修改任何程序,这个程序都能够响应N多N多的连接请求。
虽然我的程序现在能够正常运行(我只是调试的时候才会用127.0.0.1,实际使用当然得用真实的ip了),不过这个现象产生的原因一直让我很好奇。
初步来看,我觉得和我的软件关系不大,应该属于系统软件的问题,因为我的软件根本没有收到来自windows系统的网络事件,这些事件好像滞留在windows内部了。于是我想了解一下,计算机的本机真实IP地址和通用的127.0.0.1有何本质的区别会导致这种现象?