相同的私有网络间通信可以使用Socket、SocketServer/DataGramSocket来实现一个简单的IM工具,
但是如果要在两个或两个以上不同的私有网络间通信怎么解决呢?就是像QQ一样。
学计算机网络的时候知道要使用到NAT,但是本地主机怎么去获取到实际的对外IP地址和端口号呢?

解决方案 »

  1.   

    版主是想用Java做一个类似路由的程序么?首先,版主要明白,Java是应用级的程序。
    TCP/IP协议簇当中,Java只能参与应用层的代码编辑,如果想完成低层功能的实现,要通过JNC,也就是说,针对不同的操作系统,编写系统级的文件,通过操作系统的系统调用来完成。这是由于JVM本身就是一个应用程序,所以,跑在应用程序上的Java程序,是很难看到底层的东西的。在网络通信当中,主要涉及两类协议,一类是路由协议,另一类就是像IP协议、IPX协议、ICMP协议这样的协议。楼主要先明确,你要完成的是哪一类协议的功能。
    路由协议,主要是完成信息在传送过程中的路径选择。传输协议,主要用来携带信息。如果楼主要完成路由,那么,建议使用C/C++语言,来编写基于操作系统级的程序。
    如果楼主要完成信息的传递,那么,Java本身就可以通过TCP协议或UDP协议来完成了。不同网段的私网、公网,都没有什么关系。如果通信的服务器端出现使用NAT的情况,那么,服务器端就要考虑在使用NAT的设备上,设置端口映射了。将外网特定端口传来的消息,转发到内网特定主机(IP地址)的特定端口上面。
      

  2.   

    楼主可以下载LumaQQ,这是一个java做的QQ,看下它的源码是如何实现这样的功能的。