Ctorrent: copyshuffle function analyse

来源:互联网 发布:军用无人机;编程语言 编辑:程序博客网 时间:2024/06/12 01:36

            Ctorrent:  copyshuffle  function analyse  

     本文主要分析我们选中的peerpiece的请求队列,根据pieceslice 的个数设置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字节数组合起来返回14字节的数。

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

}

 

 

作为一个程序员,在自己看的代码中竟然有中文的注释,真的是一种耻辱

 

改之!!!!!!!!

 

原创粉丝点击