基于.NET平台和C#语言实现TCP NAT穿越

       1.《C# WinForm 跨线程访问控件(实用简洁写法)
       2.《基于.NET环境,C#语言 实现 TCP NAT
       3.《基于Tcp穿越的Windows远程桌面(远程桌面管理工具)

宗旨:

虽然已经实现基于.NET平台和C#语言实现TCP NAT穿越,但本文并不免费提供相关源代码及实现。本文旨在向那些正在努力实现穿越的开发者们,分享我在整个开发过程中的失败教训以及成功经验。整个开发过程历时数周,期间的各种苦楚和酸甜苦辣自知,与仍在努力道路上的开发者们共勉!以下分享我的开发过程。

文章参考:

互联网上关于TCP NAT穿越原理性的文章很多,真正能够提供源代码的文章却不多。在诸多提供源代码的文章中,不乏很多滥竽充数的文章和转发。本以为CodeProject上会有相关的介绍及开源代码,不过遗憾的是并没有。不过幸运的是,UDP穿越的文章及代码实现,网上很多是可用的(亲测可用),而且原理性的文章写得面面具到。不管原创的也好,转发的也罢,亲测可用,我想是没错的,可借鉴的。而且坚信TCP NAT穿越,应该与UDP穿越原理一样。期间参阅了大量文章,把TCP及UDP穿越的细节掌握得一清二楚。

在我参阅的很多UDP穿越的文章结尾处都会提及一句,TCP穿越同理! 但不知为何关于成功实现TCP穿越的文章却寥寥无几,显得形单影只,冷冷清清。不过期间确实参阅到有用C++及VB成功实现的,也仔细拜读了文章,结果在我自己的实践道路上,并没有帮助。期间也碰到很多相关求助贴,按网上的原理编写代码,最终却无缘成功,不知道问题究竟何在。

代码编写:

       其实代码编写并无什么可说的,无非完全按照理论性文章编写测试代码,寥寥数行代码即可实现,不过测试结果比代码行数还要悲哀,历经修改,始终无法实现穿越,期间返回多次仔细拜读文章,却始终无缘成功,最终的结局如同那些发求助帖的作者一样。转而向大神求助,但最终都没能成功。

峰回路转:

停滞不前的状态持续一段时间后,看不到转机,非常沮丧,原理及实现都没有问题,却始终不能成功,就开始怀疑参考文章的问题,毕竟人家也没实现,只是理论性的。开始转向国外英文文档,以为是方向性问题。参阅大量英文资料后,发现内容累同,基本与国内论坛上文章一致。几近放弃的时候,在一篇国外文献(RFC)找到关键点,转机出现,简单修改代码,立马成功。

总      结:

     目前互联网上关于TCP NAT穿越的文档很多,实现很少,成功者更是寥寥无几,存在最大的问题,这些参考文章中的实践方法是针对Unix平台而非Window平台的,显然基于Windows平台按网上的实践流程,显然不能成功。而国外的文献中,内容基本与国内雷同(包括原理及实践),仅用一句话说明了Window平台和Unix平台的区别,最终导致很多开发者最终失败。

关键点介绍:

在大家的印象中,想要成功建立P2P连接,必须监听端监听,连接端发起连接,才会成功。各种文献中也是这么介绍的,所以才会出现采用端口复用,一边向对等端连接,一边监听。如果你一直停留在要监听才能建立连接,你始终无缘P2P TCP NAT穿越。

附          言:

   应用 P2P技术到商业项目,除了成功建立P2P TCP NAT穿越连接外,连接速度也至关重要。另外由于一些网络环境因素,某些网络环境天生不支持P2P TCP NAT穿越。这就需要建立中继服务器,牵涉到IOCP技术,反向连接技及中间件等技术。另有尝提供全套技术及源码。

主要研发方向:Tcp,TcpNat,服务前端,反向连接,大规范并发技术
QQ交流群:697622527 欢迎交流

基于.NET环境,C#语言 实现 TCP NAT的更多相关文章

  1. 基于Eclipse的Go语言可视化开发环境

    http://jingyan.baidu.com/article/d7130635032e2f13fdf475b8.html 基于Eclipse的Go语言可视化开发环境 | 浏览:2924 | 更新: ...

  2. 【ALB学习笔记】基于.NET环境的高频RFID卡读写设备的基本操作案例

    基于.NET环境的高频RFID卡读写设备的基本操作案例 广东职业技术学院  欧浩源 1.引言 RFID高频卡在我们的日常生活中随处可见,是物联网应用中不可或缺的一个重要部分,也是全国职业院校技能大赛& ...

  3. 基于 Web 的 Go 语言 IDE - Wide 1.5.2 发布!

    这个版本由热心的开源贡献者加入了韩语支持,欢迎各位 gophers 加入到 Wide 的开源开发中.另外,这个版本还改进了 Playground,使其更稳定和易用.目前黑客派社区已经支持嵌入 Wide ...

  4. 基于链表的C语言堆内存检测

    说明 本文基于链表实现C语言堆内存的检测机制,可检测内存泄露.越界和重复释放等操作问题. 本文仅提供即视代码层面的检测机制,不考虑编译链接级的注入或钩子.此外,该机制暂未考虑并发保护. 相关性文章参见 ...

  5. 基于 Web 的 Go 语言 IDE - Wide 1.5.1 发布!

    Wide 是一个基于 Web 的 Go 语言 IDE, 其目标不是彻底代替本地 IDE,而是做本地 IDE 很难做到的事情: 分享代码:类似 playground,但支持多文件并提供嵌入方式,在其他网 ...

  6. 基于LNMP环境的ssh2扩展

    openssl: 加密算法集合,C语言实现 libssh2:ssh2协议库库,C语言实现 PECL/ssh2: libssh2的php扩展,允许php程序调用libssh2中的函数 依赖关系:PECL ...

  7. 详解基于linux环境MySQL搭建与卸载

    本篇文章将从实际操作的层面,讲解基于linux环境的mysql的搭建和卸载. 1  搭建mysql 1.1  官网下载mysql压缩包 下载压缩包时,可以先把安装包下载到本地,再上传到服务器,也可以在 ...

  8. 基于 Web 的 Go 语言 IDE - Wide 1.5.0 发布!

    Wide 是什么 Wide 是一个基于 Web 的 Go 语言团队 IDE. 在线开发:打开浏览器就可以进行开发.全快捷键 智能提示:代码自动完成.查看表达式.编译反馈.Lint 实时运行:极速编译. ...

  9. 基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!

    公布 1.1.0 这个版本号改进了非常多细节,已经全然能够用于正式项目的开发 同一时候我们上线了 Wide 在线服务 到眼下,我们提供了 Wide 和 Solo 两个在线服务,详情请看这里. Wide ...

随机推荐

  1. HihoCoder - 1617 方格取数

    HihoCoder - 1617 (从群主那里借鉴来的, 群主好强啊) 题意:中文题不解释... 题解: dp[X][i][j] 代表的是X是坐标之和 第一个人 走到位置 dp[i][x-i] 第二个 ...

  2. lightoj 1097 - Lucky Number(线段树)

    Lucky numbers are defined by a variation of the well-known sieve of Eratosthenes. Beginning with the ...

  3. Relatively Prime Graph CF1009D 暴力 思维

    Relatively Prime Graph time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  4. Springboot源码分析之Spring循环依赖揭秘

    摘要: 若你是一个有经验的程序员,那你在开发中必然碰到过这种现象:事务不生效.或许刚说到这,有的小伙伴就会大惊失色了.Spring不是解决了循环依赖问题吗,它是怎么又会发生循环依赖的呢?,接下来就让我 ...

  5. 【Offer】[18-2] 【删除链表中重复的节点】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3- ...

  6. Angular 使用教程

    1.下载node.js,然后一直安装,可以修改一下node.js文件安装路径 查看是否node.js安装成功,在运行——cmd中输入以下代码.如果安装成功,则会显示出node.js的版本号 node ...

  7. Python学习之String

    Strings可以想象成一个有序列的数组 #Indexing planet = 'Pluto' planet[0] 'P' #Slicing planet[-3:] 'uto' #How long l ...

  8. glusterfs详解及kubernetes 搭建heketi-glusterfs

    本文包含: gluster各存储卷详解.创建及使用 gluster-kubernetes搭建glusterfs存储 前言 传统的运维中,往往需要管理员手动先在存储集群分配空间,然后才能挂载到应用中去. ...

  9. urllib2爬取图片成功之后不能打开

    经过8个小时的摸索,终于决定写下此随笔! 初学爬虫,准备爬取百度美女吧的图片,爬取图片之后发现打不开,上代码: import urllib import urllib2 from lxml impor ...

  10. java树形结构工具类

    一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...