• 基于.NET环境,C#语言 实现 TCP NAT


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

  • 相关阅读:
    SwiftUI_2_共享绑定
    iOS_知识点_动画&绘图
    excle表格数据列前批量添加数据
    异步编程模式学习
    这不是一篇技术文档!
    lowcode
    java中如何针对系统灵活变换分割符?
    linux安装nginx
    序列化与反序列化
    Linux安装nginx star
  • 原文地址:https://www.cnblogs.com/zhangguihua/p/9996254.html
Copyright © 2020-2023  润新知