P2P打洞java源代码
2018-03-13 16:34
190 查看
首先判断是否可以直连,可以直连,表明内网环境,直接通讯。否则需要一个中间人的角色:Server。所以打洞的过程如图所示:
![](http://blog.csdn.net/yanjiee/article/details/51206939)
![](https://img-blog.csdn.net/20160421111119424?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
主要流程是这样的:(1)如果A想与B通信;(2)A首先连接C,C得到A的外网NAT A的地址和端口;(3)B也要连接C,C得到B的外网NAT B的地址和端口;(4)A告诉C说我要和B通讯;(5)C通过NAT B发信息给B,告诉B A的外网NAT A的地址和端口;(6)B向NAT A发数据包(肯定会被NAT A丢弃,因为NAT A上并没有 A->NAT B 的合法session),但是NAT B上就建立了有B->NAT A的合法session了;(7)B发数据包给C,让 C 通知 A,我已经把洞打好了;(8)A接受到通知后向 B 的外网发NB数据包,这样就不会被丢弃掉了。因为对于NAT B来说,它看到的是A的外网NAT A的地址,而通过第6步,B已经让NAT A成为NAT B的合法通信对象了。所以当NAT A发数据包给NAT B时,NAT B就会接收并转发给B;说明:只适应某些路由。
代码地址:https://gitee.com/lgcjava/p2pnats.git
联系方式:QQ:153277817
主要流程是这样的:(1)如果A想与B通信;(2)A首先连接C,C得到A的外网NAT A的地址和端口;(3)B也要连接C,C得到B的外网NAT B的地址和端口;(4)A告诉C说我要和B通讯;(5)C通过NAT B发信息给B,告诉B A的外网NAT A的地址和端口;(6)B向NAT A发数据包(肯定会被NAT A丢弃,因为NAT A上并没有 A->NAT B 的合法session),但是NAT B上就建立了有B->NAT A的合法session了;(7)B发数据包给C,让 C 通知 A,我已经把洞打好了;(8)A接受到通知后向 B 的外网发NB数据包,这样就不会被丢弃掉了。因为对于NAT B来说,它看到的是A的外网NAT A的地址,而通过第6步,B已经让NAT A成为NAT B的合法通信对象了。所以当NAT A发数据包给NAT B时,NAT B就会接收并转发给B;说明:只适应某些路由。
代码地址:https://gitee.com/lgcjava/p2pnats.git
联系方式:QQ:153277817
相关文章推荐
- 11款用于优化、分析源代码的Java工具
- 共同学习Java源代码-多线程与并发-ThreadPoolExecutor类(五)
- java开源框架的源代码怎么读?
- Mark一个JAVA源代码查询网站
- java中无法查看函数源代码(ctrl+左键或者使用open declaration不管用)
- windows下检测java版本号的源代码
- Thinking in Java 4源代码下载
- 发布新Java Andriod 项目模板组件,生成Java Andriod 项目源代码
- PowerDesigner-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)
- eclipse中查看java String类的源代码
- java 文件输入输出(附源代码)
- 运用加密技术保护Java源代码
- Web、Java源代码、资源文件在Maven工程中的文件路径
- 史上第一个Flash P2P源代码来啦!
- Java网络编程:实现HTTP断点续传下载工具(附源代码)
- 共同学习Java源代码--数据结构--Set接口
- Java 多线程编程之七:死锁(附源代码)
- 第一章 计算机、程序和Java概述 课本源代码
- Android学习笔记 2 : Activity的源代码 xml vs Java
- 【从零之六&完结】android口语对话系统(RavenClaw java版 含所有源代码)