用C语言开发一个BT下载软件 (四) ------ 代码实现-5-Peer管理模块

本文详细介绍了在C语言中开发BT下载软件的Peer管理模块,包括如何为每个建立TCP连接的Peer创建结构体,以及管理Peer链表的操作,如添加和删除节点。
摘要由CSDN通过智能技术生成

      系统为每一个与之建立TCP连接的Peer构造一个Peer结构体。Peer管理模块负责管理由各个Peer节点构成的Peer链表,主要工作是创建节点,添加节点到Peer链表,从Peer链表中删除节点等。


//peer.h

#ifndef PEER_H
#define PEER_H

#include <string.h>
#include <time.h>
#include "bitfield.h"

#define  INITIAL              -1  // 表明处于初始化状态
#define  HALFSHAKED            0  // 表明处于半握手状态
#define  HANDSHAKED            1  // 表明处于全握手状态
#define  SENDBITFIELD          2  // 表明处于已发送位图状态
#define  RECVBITFIELD          3  // 表明处于已接收位图状态
#define  DATA                  4  // 表明处于与peer交换数据的状态
#define  CLOSING               5  // 表明处于即将与peer断开的状态

// 发送和接收缓冲区的大小,16K可以存放一个slice,2K可以存放其他消息
#define  MSG_SIZE  2*1024+16*1024

typedef struct _Request_piece {
	int     index;                // 请求的piece的索引
	int     begin;                // 请求的piece的偏移
	int     length;               // 请求的长度,一般为16KB
	struct _Request_piece *next;
} Request_piece;

typedef struct  _Peer {
	int            socket;                // 通过该socket与peer进行通信
	char           ip[16];                // peer的ip地址
	unsigned short port;                  // peer的端口号
	char           id[21];                // peer的id

	int            state;                 // 当前所处的状态

	int            am_choking;            // 是否将peer阻塞
	int            am_interested;         // 是否对peer感兴趣
	int            peer_choking;          // 是否被peer阻塞
	int            peer_interested;       // 是否被peer感兴趣

	Bitmap         bitmap;                // 存放peer的位图
	
	char           *in_buff;              // 存放从peer处获取的消息
	int            bu
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值