相同的私有网络间通信可以使用Socket、SocketServer/DataGramSocket来实现一个简单的IM工具,
但是如果要在两个或两个以上不同的私有网络间通信怎么解决呢?就是像QQ一样。
学计算机网络的时候知道要使用到NAT,但是本地主机怎么去获取到实际的对外IP地址和端口号呢?
但是如果要在两个或两个以上不同的私有网络间通信怎么解决呢?就是像QQ一样。
学计算机网络的时候知道要使用到NAT,但是本地主机怎么去获取到实际的对外IP地址和端口号呢?
解决方案 »
- 出现异常
- 帮忙看下一个Exception in thread "main" java.lang.NullPointerException错误,编译的时候没错
- 两个数组,怎么引用?
- JFrame 最小化后,“还原”的代码如何写呢?
- 关于Arraylist的问!!!
- for 循环 效率 问题
- 一个怪问题,包的引用
- JAVA打印中的问题!
- 2000 professional为什么不好安装JDK1.4.2啊?
- 分不多,但救命啊:画动画的时候,屏幕闪得好厉害呀!!!
- 100分求助!取表单文件域的value的值不全!<input type=file value="">
- 如何在一个<input />中区别何时调用onblur事件或者onkeydown事件
TCP/IP协议簇当中,Java只能参与应用层的代码编辑,如果想完成低层功能的实现,要通过JNC,也就是说,针对不同的操作系统,编写系统级的文件,通过操作系统的系统调用来完成。这是由于JVM本身就是一个应用程序,所以,跑在应用程序上的Java程序,是很难看到底层的东西的。在网络通信当中,主要涉及两类协议,一类是路由协议,另一类就是像IP协议、IPX协议、ICMP协议这样的协议。楼主要先明确,你要完成的是哪一类协议的功能。
路由协议,主要是完成信息在传送过程中的路径选择。传输协议,主要用来携带信息。如果楼主要完成路由,那么,建议使用C/C++语言,来编写基于操作系统级的程序。
如果楼主要完成信息的传递,那么,Java本身就可以通过TCP协议或UDP协议来完成了。不同网段的私网、公网,都没有什么关系。如果通信的服务器端出现使用NAT的情况,那么,服务器端就要考虑在使用NAT的设备上,设置端口映射了。将外网特定端口传来的消息,转发到内网特定主机(IP地址)的特定端口上面。