基于.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. Day002_LInux基础_常用命令_001

    1.创建用户useradd -m -g 加参数-m 会自动创建家目录 -g 指定group 加入什么群组 passwd 设置用户的密码 su 和su - 的区别 su - 切换用户switch use ...

  2. 《MySQL实战45讲》学习笔记3——InnoDB为什么采用B+树结构实现索引

    索引的作用是提高查询效率,其实现方式有很多种,常见的索引模型有哈希表.有序列表.搜索树等. 哈希表 一种以key-value键值对的方式存储数据的结构,通过指定的key可以找到对应的value. 哈希 ...

  3. 十天快速入门Python

    课程导学 001 课程定位和目标 002 课程导学 第一部分 Python快速入门 第1天 Python基本语法元素 003 Python基本语法元素 004 程序设计基本方法 005 Python开 ...

  4. Vert.x 之 HelloWorld

    Hello World 欢迎来到Vert.x的世界,相信您在接触Vert.x的同时,迫不及待想动手试一试,如您在学习计算机其它知识一样,总是从Hello World开始,下面我们将引导您制作一个最基本 ...

  5. (六十七)c#Winform自定义控件-柱状图

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  6. ASP.NET Core SignalR:集线器Hubs

    一.什么是集线器hubs 通过SignalR的集线器hubs中定义的方法,服务器可以调用连接中的客户端定义的方法,而客户端也可以调用服务器端集线器中定义的方法.SignalR负责实现了客户端和服务器之 ...

  7. .Net基础篇_学习笔记_第六天_类型转换和方法(函数)简介

    类型转换:Convert.ToInt32();  int.Parse();  int.TryParse(); Convert.ToInt32(); 的本质就是在使用 int.Parse(); int. ...

  8. Winform中使用zxing和Graphics实现自定义绘制二维码布局

    场景 zxing.dll下载 https://download.csdn.net/download/badao_liumang_qizhi/11623214 效果 实现 根据上面文章中将简单的二维码生 ...

  9. Hessian 接口使用示例总结(转载)

    一.使用hessian接口准备 首先,hessian接口的使用,必须要准备hessian接口的jar包,本文使用的jar包如下:hessian-4.0.7.jar; Hessian接口的使用一般是在两 ...

  10. Mysql中有符号数和无符号数的区别

    1原文地址:https://blog.csdn.net/s78365126/article/details/85048882 2可以手写sql验证一下 3mysql无符号和有符号的区别无符号unsig ...