emuleudp.docVIP

  • 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)

1亿VIP精品文档

相关文档