基于.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 欢迎交流

最新文章

  1. 四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT。
  2. CloudNotes云端个人笔记系统系列文章汇总
  3. shell 脚本技巧
  4. 实现两个MySQL数据库之间的主从同步
  5. EF+MySQL乐观锁控制电商并发下单扣减库存,在高并发下的问题
  6. Fury观后感
  7. C#→关于System.Data.Linq下的Table<TEntity> 泛型类 的问题
  8. ZipArchive框架的文件压缩和解压
  9. HDU 2612 -Find a way (注重细节BFS)
  10. PLSQL-Developer数据库连接工具使用方法
  11. webpack认识
  12. Java读取excel数据保存入库
  13. mssql sqlerver 脚本 计算数据表的结余数的方法分享
  14. Python_老男孩练习题1
  15. Linux 软件安装到 /usr,/usr/local/ 还是 /opt 目录?
  16. python第一个程序HelloWorld
  17. 如何判断来访的IP是否是百度蜘蛛ip?
  18. windows下如何修改mysql的端口号
  19. mapreduce设置setMapOutputKeyClass与setMapOutputValueClass原因
  20. 使用Maven创建Web应用程序项目

热门文章

  1. Codeforces 898 B(拓展欧几里得)
  2. CodeForces 103D Time to Raid Cowavans 询问分块
  3. lightoj 1283 - Shelving Books(记忆化搜索+区间dp)
  4. hdu 1269 迷宫城堡(trajan判环)
  5. Codeforces 735D Taxes(简单数论)
  6. 剑指offer】Java版代码(完整版)
  7. Java 教程 (Java 对象和类)
  8. Linux 笔记 - 第六章 Linux 磁盘管理
  9. 48 (OC)* 适配iPad和iPhone、以及横竖屏适配。
  10. Git同步更新操作GitHub和码云仓库上面的代码