Ctorrent: copyshuffle function analyse

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

}

 

 

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

 

改之!!!!!!!!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值