- 5
- 0
- 约1.12千字
- 约 3页
- 2017-06-08 发布于重庆
- 举报
emuleudp
一、引言VeryCD emule 自去年推出LowToLow功能以来,经过很多网友热心的测试, 到限制为止已经比较稳定的运行了,VeryCD emule 是一个开源软件,我们遵循GPL的开放精神,开放了所有代码,但是emule的各项功能都有很大的完善空间, 我们相信还有很多网络编程爱好者热爱emule这个软件,但是由于没有相关的文档资料,估计想参与的网友可能也不知道该从何下手,因此我们准备在这里陆续贴出些资料,期待更多编程爱好者、网络系统架构师能参与进来,大家一起来完善改进emule这个优秀的P2P软件,大家一起来分享知识,分享编程的乐趣。二、VeryCD emule L2L相关类简介和架构图穿透功能代码主要在以下文件中实现:NatThread.cpp、NatSocket.hcpp、 TraverseBySourceExchange.cpp、TraverseBySvr.cpp、 TraverseStrategy.cpp、 SourceExchangeNAT.cpp它们主要完成以下类的的具体功能:CNatThread: 穿透功能的工作线程CNatSocket: 穿透成功,用于Peer之间通讯(也即FakeTcpSocket,用UDP模拟TCP通信,在这个类中的一些发送接收数据处理的算法我们采用了emule neo Mode的一些实现代码)CTraverseFactory 策略工厂,创建策略组合CTraverseBySvr 基于服务器穿透的策略类CTraverseBySourceExchange 基于源交换穿透的策略类CUnconnSocket 被动方收到穿透请求,创建CUnconnSocket,开始穿透CTraverseStrategy 穿透策略类的基类CSourceExchangeNAT 处理源交换穿透命令系统静态结构图如下:三、实现思路CAsyncSocketEx是TCP socket,emule通过它把数据发送出去。我们扩展了CAsyncSocketEx的Connect, Send, Receive三个函数。如果是穿透连接的话,走UDP穿透的通道,否则就按原来的TCP传输。这样的好处是:1 合理性。我们是改进数据传输方式,应该只改动传输相关的类(即CAsyncSocketEx),其它地方代码不应该受到大的改动,对其它逻辑不应该有大的影响。2 架构上耦合度小。主要是CAsyncSocketEx跟穿透有关系,代码与官方同步时Merge的工作量小。3. 对上层透明。上层不必关心Peer是不是Low2Low的Peer。穿透原理图如下
原创力文档

文档评论(0)