局域网P2P技术实现

本文介绍了如何利用socket TCP技术构建P2P环境,特别是在BT服务端和客户端的应用。服务端通过fork进程处理客户端请求,客户端在完成下载后向服务器报告。文章还涉及到解决“Address already in use”错误、资源分配、负载平衡、种子管理和黑名单机制。
摘要由CSDN通过智能技术生成

P2P技术实现方式有很多,现主要介绍利用socket tcp方式构建P2P环境的方法。

在开始的时候主要参考NBD协议部分的server端程序来实现BT服务端程序。

每个client端都有两个进程来实现P2P功能,一个是客户端的server程序,另一个是客户端的client程序。而BT服务器端只有一个进程,负责资源分配和负载平衡等工作。

下面是服务端程序的注意事项。调试是总发现有“Address already in use”信息出现,加入下面代码可以解决此问题。

/* lose the pesky "Address already in use" error message */
if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) {
        perror("setsockopt SO_REUSEADDR");
}
if (setsockopt(sockfd,SOL_SOCKET,SO_KEEPALIVE,&yes,sizeof(int)) == -1) {
        perror("setsockopt SO_KEEPALIVE");
}

每一个客户端发起请求时,首先询问服务器端,整个下载的镜像的种子分布状态,之后获得每一个片的种子分布状态。服务器端的server为每一个客户端的请求fork出一个进程。等待客户端下载完成后,报告个服务器端,此片我已经下载完成,并更新BT资源数据。同时可以设计客户端向BT服务器是否可以关机/开机做种等机制。

种子资源数据结构如下:

struct pieces_t{
        struct list_head head;
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值