基于.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 欢迎交流
基于.NET环境,C#语言 实现 TCP NAT的更多相关文章
- 基于Eclipse的Go语言可视化开发环境
http://jingyan.baidu.com/article/d7130635032e2f13fdf475b8.html 基于Eclipse的Go语言可视化开发环境 | 浏览:2924 | 更新: ...
- 【ALB学习笔记】基于.NET环境的高频RFID卡读写设备的基本操作案例
基于.NET环境的高频RFID卡读写设备的基本操作案例 广东职业技术学院 欧浩源 1.引言 RFID高频卡在我们的日常生活中随处可见,是物联网应用中不可或缺的一个重要部分,也是全国职业院校技能大赛& ...
- 基于 Web 的 Go 语言 IDE - Wide 1.5.2 发布!
这个版本由热心的开源贡献者加入了韩语支持,欢迎各位 gophers 加入到 Wide 的开源开发中.另外,这个版本还改进了 Playground,使其更稳定和易用.目前黑客派社区已经支持嵌入 Wide ...
- 基于链表的C语言堆内存检测
说明 本文基于链表实现C语言堆内存的检测机制,可检测内存泄露.越界和重复释放等操作问题. 本文仅提供即视代码层面的检测机制,不考虑编译链接级的注入或钩子.此外,该机制暂未考虑并发保护. 相关性文章参见 ...
- 基于 Web 的 Go 语言 IDE - Wide 1.5.1 发布!
Wide 是一个基于 Web 的 Go 语言 IDE, 其目标不是彻底代替本地 IDE,而是做本地 IDE 很难做到的事情: 分享代码:类似 playground,但支持多文件并提供嵌入方式,在其他网 ...
- 基于LNMP环境的ssh2扩展
openssl: 加密算法集合,C语言实现 libssh2:ssh2协议库库,C语言实现 PECL/ssh2: libssh2的php扩展,允许php程序调用libssh2中的函数 依赖关系:PECL ...
- 详解基于linux环境MySQL搭建与卸载
本篇文章将从实际操作的层面,讲解基于linux环境的mysql的搭建和卸载. 1 搭建mysql 1.1 官网下载mysql压缩包 下载压缩包时,可以先把安装包下载到本地,再上传到服务器,也可以在 ...
- 基于 Web 的 Go 语言 IDE - Wide 1.5.0 发布!
Wide 是什么 Wide 是一个基于 Web 的 Go 语言团队 IDE. 在线开发:打开浏览器就可以进行开发.全快捷键 智能提示:代码自动完成.查看表达式.编译反馈.Lint 实时运行:极速编译. ...
- 基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!
公布 1.1.0 这个版本号改进了非常多细节,已经全然能够用于正式项目的开发 同一时候我们上线了 Wide 在线服务 到眼下,我们提供了 Wide 和 Solo 两个在线服务,详情请看这里. Wide ...
随机推荐
- 牛客多校第六场 J Heritage of skywalkert 随即互质概率 nth_element(求最大多少项模板)
链接:https://www.nowcoder.com/acm/contest/144/J来源:牛客网 skywalkert, the new legend of Beihang University ...
- codeforces 808 D. Array Division(二分)
题目链接:http://codeforces.com/contest/808/problem/D 题意:有一串长度为n的数组,要求选择一个数字交换它的位置使得这串数能够分成两串连续的和一样的数组. 这 ...
- codeforces 919C Seat Arrangements 思维模拟
C. Seat Arrangements time limit per test 1 second memory limit per test 256 megabytes input standard ...
- window对象,BOM,window事件,延时器,DOM
01.定时器补充 function fn(){ console.log(1);}setInterval("fn()",100); //定时器调用匿名函数/* funct ...
- vim 同时操作多行
使用 vim 的时候,经常会有同时注释或解开注释的情况,逐行编辑很浪费时间,下面的同时操作多行的方式 删除操作 control+v 进入 visual block 模式 选中要删除几行文字 d删除 插 ...
- 常用分享功能.超级简单,qq 微信 新浪微博分享
<div id="share"> <a href="javascript:void(0)" share-type="qzone&qu ...
- Intellij IDEA在maven项目中添加外部Jar包运行
一. 问题概述 我们知道Intellij IDEA是非常好用的Java语言开发的集成环境.提供了非常多实用的功能,包括了智能代码助手.代码自动提示.代码重构.各种插件等,当然也集成了maven 正常情 ...
- 把windows下的压缩包放到Linux目录下去
今天在自学redis时出现了问题,因为楼主linux也是空白纸,前几天安装了Linux后就只会基本的命令,其他的一概不通啊,所以当redis要在Linux中用时就傻眼了,索性就在windows中下载了 ...
- jmeter linux压测报错:Error in NonGUIDriver java.lang.IllegalArgumentException: Problem loading XML from:'/home/server/ptest/disk_out.jmx'.
1.linux环境jmeter与win环境编写脚本的jmeter版本不一致,版本改为一致 2.脚本中存在中文,去除中文 3.脚本中存在类似于jp@gc - Active Threads Over Ti ...
- Day 6 文件属性与命令执行流程
1. 第一列第一个字符 表示文件类型 rw-r--r-- 权限(下周) 4 这个文件被链接次数 root 文件的拥有者(用户) root 文件的拥有组(用户组 ==>家族) 2018 文 ...