资源简介
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
- 上一篇:设置RichTextBox的文本对齐方式
- 下一篇:点名册.exe
相关资源
- SpringMVC文件上传与的实现.rar
- 中国1:400万基础地理数据
- AsyncTask文件控制暂停和继续,在状态
- 最新的北京地铁shp文件75146
- 武汉市行政区划shp文件61656
- Rational Rose Common破解文件
- Web Api 通过文件流 文件到本地
- 右键属性文件校验插件可同时生成十
- CCS中如何生成LIB文件-并在另外CCS项目
- TI CCS V5.4 安装步骤及破解文件
- 清翔电子MCS51开发板资料_新版 01_开发
- 三星DDR800内存条PCB文件和原理图
- ASUS BIOS 加NVME协议文件: Nvme.ffs NV
- adams vibration 练习原文件
- python实现的ftp自动上传、下载脚本
- VC 获得文件属性 获取文件的创建时
- STM32基于rt_thread操作系统的SDHC卡文件
- [免费]安全加密软件U盘加密,文件加
- “暴风一号”(“1KB文件夹快捷方式
- 加密cad图形的lisp文件
- 德卡D3读卡器测试程序驱动文件
- dsp2812上128点FFTc程序以及其CMD文件
- hidusage.h hidpi.h 等USB开发用头文件
- zen_cart_1.3.9h_ 配置文件优化
- Google Earth KML文件生成工具
- J2EE 配置文件
- UNICODE GBK双向码表二进制文件
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- Adobe Illustrator CS5原版amtlib.dll文件
- stm32 ds18b20 温度传感器 测试通过
评论
共有 条评论