• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: 其他
  • 标签: P2P  文件  上传  下载  

资源简介

P2P文件传输,实现上传和下载功能,用于局域网内部的文件传输。

资源截图

代码片段和文件信息

#include “P2P_Download_Client.h“

int main(void)
{
char url[MAX] = “p2p://192.168.100.27/home/okfile/200792611456486_2.jpg“;
do_P2P_Download(url);
}

int do_P2P_Download(char* url)
{
int ret = 0 len = 0 total_len = 0 wlen = 0;
FILE *fp;
P2P_MESSAGE* message;
P2P_FILE_BE* file_be;
char buf[1024];
char mark_name[256];
char temp[256];

message = p2p_URL_Analyse(url);

if (message != NULL)
{
//建立socket连接
int sfd = socket_connect(message->ip 8010);
if (sfd < 0)
{
printf(“socket_connect failed.\n“);
return -1;
}
//开始发送命令,发送命令和文件地址
printf(“socket_connect successed\n“);
memset(buf 0 sizeof(buf));
strcpy(buf “GET_DATA“);
strcat(buf “#“);
strcat(buf message->file_addr);
printf(“命令和文件地址:%s\n“ buf);
//发送接受文件命令
ret = send(sfd buf strlen(buf) 0);
if (ret < 0)
{
perror(“send error\n“);
return -1;
}
//保存本地的标记文件
strcpy(mark_name message->file_name);
strcat(mark_name “.mark“);
//发送文件开始结束字jie
memset(buf 0 sizeof(buf));
//strcpy(buf “0#10000#10000“);
/*ret = send(sfd buf strlen(buf) 0);
if (ret < 0)
{
perror(“send error\n“);
return -1;
}*/
//接受數據文件
fp = fopen(message->file_name “wb“);
printf(“message->file_name:%s\n“ message->file_name);
if (fp == NULL)
{
perror(“fopen“);
return -1;
}
printf(“fopen file ok\n“);
//接受文件数据
while (1)
{
memset(buf 0 sizeof(buf));
len = recv(sfd buf sizeof(buf) 0);
printf(“recved :%d\n“ len);
if (len < 0)
{
perror(“recv“);
break;
}
else if (len == 0)
{
printf(“recv over\n“);
break;
}
else
{
if ((strcmp(buf “error“) == 0) || (strcmp(buf “file_open_error“) == 0))
{
printf(“server has something wrong!\n“);
break;
}
wlen = fwrite(buf 1 len fp);
printf(“fwrite:%d\n“ wlen);
if (wlen < len)
{
perror(“fwrite“);
break;
}
else if (wlen == 0) //调用不成功
{
printf(“fwrite error\n“);
break;
}
else
{
printf(“fwrite OK\n“);
}
}
total_len += len;
}
printf(“recved total length:%d\n“ total_len);
close(fp);
//写入到标记文件中
fp = fopen(mark_name “wb“);
if (fp == NULL)
{
perror(“fopen“);
return -1;
}
memset(buf 0 sizeof(buf));
strcpy(buf “0#“);
sprintf(temp “%d“ total_len);
strcat(buf temp);
strcat(buf “#“);
strcat(buf temp);
fwrite(buf 1 strlen(buf) fp);
fclose(fp);
}
return 0;
}


int socket_connect(char* ip  int port)
{
int sockfd;
int bind_ret;
socklen_t len;

//设置地址结gou
struct sockaddr_in client_addr;
struct sockaddr_in server_addr;
//初始化地址结购
memset(&client_addr0sizeof(client_addr));
memset(&server_addr0sizeof(client_addr));
//填充客户端地址结构中的值
client_addr.sin_family=AF_INET;
client_addr.sin_addr.s_addr=htons(INADDR_ANY);
client_addr.sin_port=htons(0);//当port为0的时候表示让系统随机选择一个端口号
//create socket
sockfd=socket(AF_INETSOCK_STREAM0);
if(sockfd < 0)
{
printf(“create socket failed.\n“);
return -1;
}
//bind 地

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1744  2014-12-17 21:05  P2P_Download_Server.h

     文件       5472  2014-12-17 21:35  P2P_Download_Client.c

     文件       1240  2014-12-17 21:08  P2P_Download_Client.h

     文件       5538  2014-12-17 21:33  P2P_Download_Server.c

----------- ---------  ---------- -----  ----

                13994                    4


评论

共有 条评论