前言:
最近我用java做了一个C/S的类似QQ之类的IM系统(即时通讯系统),遇到了不能跨局域网通讯的问题,经过在网上,和书上查阅了一些资料,了解了一些情况,现在就总结一下我的解决方案吧(本人也是在不断错误中学习,如果有什么不对的地方,请大家多多指教)。
问题描述:
一般情况下,只能在同一个子网即同一个虚拟局网里通讯,或者子网访问外网,外网访问不了内网。因为虚拟局域网相对于外网都是透明的,所以外网是不能直接访问子网,举个例子:校园网里的学生信息管理系统(MIS),需要是校园网里面的IP地址才能访问,校园网以外的IP是不能访问,这样的做法的好处不用我多说吧。。
而即时通讯需要相互交流信息,所以需要相互都能访问到,问题是:如何跨子网通讯?
问题分析:
首先,在不同网络点之间(即peer-to-peer对等网络),可以分为以下几种情况:
1.ClientA在子网,ClientB也在同一个子网
2.ClientA在子网,ClientB在外网
3.ClientA在一个子网内,ClientB在另一个子网内
对于第一种情况,不需要经过路由器的转发,可以直接相互通讯。
对于第二种情况