Ctorrent: copyshuffle function analyse
来源:互联网 发布:军用无人机;编程语言 编辑:程序博客网 时间:2024/06/12 01:36
Ctorrent: copyshuffle function analyse
本文主要分析我们选中的peer中piece的请求队列,根据piece中slice 的个数设置shuffle 的次数。 另外还说明在ctorrent中是如何传输一个struct结构体的(如何传输,如何接受如何保持字符串和二进制的一致性?)
第一部分:
源码如下:
这个函数没有什么特殊的地方,我们选中了一个piece 和一个peer, 将该peer 的请求队列拷入当前正在通信的peer的请求队列中? 在该函数中,首先是单纯的将它拷贝过来,其根据len 的大小决定我们shuffle(洗牌,这里的意思是乱序)的次数, 具体乱序的又是根据随机的原则来的。
第二部分:ctorrent中数据的传输
我们知道,网络编程中,我们要考虑大端,小端 ,异构网络等问题。最基本的一点就是,在发送端的数据怎么才能够保证在接收端收到的是一个完整的发送端的数据?
有很多第三方可以实现这个功能(xml 等, 不太了解)。
但是一般的网络编程中,我们都是通过一些顺序来转换的(在ctorrent中,我们只是用到了int,下面包括float 的转换,其实float 类型比较复杂的)
memcpy hton ntoh memcpy
float----------> int -------> 网络-------->int------------>float
在源码中有两个函数实现了这些转换
//此函数是set_nl()的反操作,即把sfrom中的四个1字节数组合起来返回1个4字节的数。
size_t get_nl(char *from)
{
//assumes H_INT_LEN==H_LEN==4
uint32_t t = 0;
memcpy(&t, from, H_INT_LEN);
return
(size_t)ntohl((unsigned long)t);
}
void set_nl(char *to, size_t from)
{
//assumes H_INT_LEN==H_LEN==4
uint32_t from32 = (uint32_t)htonl((unsigned long)from);
memcpy(to, &from32, H_INT_LEN);
}
作为一个程序员,在自己看的代码中竟然有中文的注释,真的是一种耻辱
改之!!!!!!!!
- Ctorrent: copyshuffle function analyse
- cTorrent-linux命令行BT下载工具 cTorrent下载
- CTorrent程序源码分析
- CTorrent程序源码分析
- pcap analyse
- Ctorrent: 寻找peer 算法分析
- OpenSource -- Cal3D Analyse
- android adb adbd analyse
- android adb adbd analyse
- Android Adb Analyse
- IceStorm src simple analyse
- 【转】Android Adb Analyse
- Android Adb Analyse
- Android Adb Analyse
- Android Adb Analyse
- Android Adb Analyse
- WiFi frimware loading analyse
- USB子系统gadget analyse
- WebParts
- 定义web service接口的十点注意事项(转)
- 大型ORACLE数据库优化设计方案
- 数据采集接口OPC SERVER For UN2000
- Java笔试题集锦
- Ctorrent: copyshuffle function analyse
- 要疯了
- javadoc自动生成开发文档
- jquery模仿QQ消息框
- [转载]Win32 API 实现系统托盘程序
- 谈PHP的二叉树的表示
- Js屏蔽一些快捷键
- StringTokenizer类
- 开始使用三种PHP 框架常用框架