计算机的本机真实IP地址和通用的127.0.0.1有何本质的区别?

lazydodo lazydodo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
计算机的本机真实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有何本质的区别会导致这种现象?
...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
lazydodo
网络编程 18,356 成员 64,161 内容