首先判断是否可以直连,可以直连,表明内网环境,直接通讯。否则需要一个中间人的角色:Server。所以打洞的过程如图所示:

主要流程是这样的:

(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

P2P打洞java源代码相关推荐

  1. p2p打洞源码,p2p内网穿透源码,NAT内网穿透源码,NAT穿透源码

    一.p2p是什么? p2p是点对点的缩写(peer-to-peer networking),其可以定义为:端对端的资源共享,每一端即可是服务端,也可以是客户端.既可以是资源的提供者,也可以是资源的共享 ...

  2. UDP 构建p2p打洞过程的实现原理(持续更新)

    UDP 构建p2p打洞过程的实现原理(持续更新) 发表于7个月前(2015-01-19 10:55)   阅读(433) | 评论(0) 8人收藏此文章, 我要收藏 赞0 8月22日珠海 OSC 源创 ...

  3. Java 源代码和 C 源代码的运行区别

    与其他程序的执行方式和编译方式不同. Java 源代码需要进行编译成字节码后在 Java 虚拟机上运行,这样 Java 程序能够保持独立性和跨平台功特性. 请参考下图. https://www.cwi ...

  4. Android APK反编译得到Java源代码或资源文件

    一.反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD-GUI,前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源 ...

  5. 做一个p2p打洞的C#程序

    做一个p2p打洞的C#程序 转载于:https://www.cnblogs.com/cuihongyu3503319/archive/2011/03/15/1985021.html

  6. 解析java源代码_一步步解析java执行内幕

    对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...

  7. 转jpg java源程序_将pdf文件转成图片并删除java源代码

    将pdf文件转成图片并删除java源代码/** * 将pdf转成img */ public static void changePdfToImg() { try { File file = new F ...

  8. jdk12源代码文件_JDK 11:轻松取出单文件Java源代码程序

    jdk12源代码文件 JDK 11 Early Access Builds包含与JEP 330相关的预览功能("启动单个文件源代码程序"). 我之前在" Shebang即 ...

  9. JDK 11:轻松取出单文件Java源代码程序

    JDK 11 Early Access Builds包含与JEP 330相关的预览功能("启动单个文件源代码程序"). 我之前在" Shebang即将来到Java? &q ...

最新文章

  1. maemo环境安装问题和解决方案(ubuntu 10.04)
  2. java耗时任务有哪些,java后台耗时任务多线程返回结果
  3. Spring入门详细教程(四)
  4. makefile中的函数
  5. 启明云端分享| 基于SSD201核心板的4.3寸彩屏开发板接口相关说明
  6. X509Certificate2 本地正常,放到线上内部错误
  7. ajax请求, 前后端, 代码示例
  8. 测试点4错的来:1029 旧键盘 (20分)
  9. TextView does not support text selection. Selection cancelled. 。TextViews复制文本失效解决方法
  10. 企业数字化新战场:低代码究竟是“毒瘤”还是“良药”?
  11. Qt_发送邮件(以qq邮箱为例)
  12. 网页自动加拼音html,HTML5给汉字加拼音收起展开组件的实现代码
  13. java视频生成缩略图_Java中使用ffmpeg生成视频缩略图
  14. Ubuntu 下启用trackPoint
  15. 数据治理---Apache Atlas元数据管理
  16. 中科院ICTCLAS分词汉语词性标记集
  17. Threejs实现3d地球记录(1)
  18. NVIDIA Jetson之OTA远程升级Jetpack
  19. C++图书管理系统_艾孜尔江撰
  20. html5随鼠标移动动画,使用JS实现气泡跟随鼠标移动的动画效果

热门文章

  1. SQL Server数据库系列——锁和并发
  2. 服装ERP系统下的成本计算如何及时有效
  3. 《剑指offer》41~45
  4. java写七彩文字_AE实现七彩闪动文字效果
  5. 华硕网吧服务器型号,网吧应用新平台 华硕P7F-C-SAS引领网吧服务器市场
  6. 浙江工业大学计算机/软件工程 考研
  7. SQL Servr 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现
  8. html 超链接ppt,HTML和超链接.ppt
  9. 郑正中:中国商业智能的应用特点
  10. 恶意网址virus.html,恶意样本查找