资源简介
这个真的是,手把手写的啊。是在局域网内实现的一个,简单文件上传下载。无服务器的那种,没有做界面。思路很简单,大家,可以随便看看。
功能为,能够从多台主机上下载文件。
有兴趣的可以给它做个界面呢。
代码片段和文件信息
#include“CClient.h“
DWORD WINAPI killtimer(LPVOID lp)
{
bool *stop = (bool*)lp;
Sleep(WAITTIME); //等待其他客户端返回的时间设为60秒
*stop = false;
return 0;
}
int socket_recv(SOCKET sock char *buf int size)
{
int stat;
int index = 0;
while (size != 0)
{
stat = recv(sock(char*)buf+indexsize0);
if (stat == SOCKET_ERROR) {
if(WSAGetLastError() == WSAEWOULDBLOCK)
continue;
break;
}
else if (stat == 0)
{
closesocket(sock);
break;
}
size -= stat;
index += stat;
}
return stat;
}
DWORD WINAPI downfile(LPVOID lp)
{
#ifdef _DEBUG1
cout<<“线程开始!“< #endif
PUPARAM pup = (PUPARAM)lp;
SOCKET socCli = pup->socket;
#ifdef _DEBUG1
// printf(“UPAR参数:%d %d %s %s\n“ pup->block_count pup->socket pup->filename.c_str() pup->path.c_str());
#endif
// return 0;
//ioctlsocket(socCli FIONBIO (u_long FAR*)&mode);
int recstat block;
int i = 0;
LoadFileMsg lf;
//将要下载的文件块段
for(i = 0; i block_list.size(); ++i)
lf.block_list[i] = pup->block_list[i];
lf.block_list[i] = -1;
strcpy(lf.file_path pup->path.c_str());
lf.block_count = pup->block_count;//一共将文件分成多少块
block = pup->block_count;
int stat;
// return 0;
stat = send(socCli (char*)&lf sizeof(LoadFileMsg) 0); //将要下载的信息发送到对方
if(stat == SOCKET_ERROR)
{
#ifdef _DEBUG1
cout<<“在发送下载信息时产生错误“< #endif
delete pup;
closesocket(socCli);
return -1;
}
FileManager fm(pup->filename.c_str() true);
cout<<“pup->filename“<filename<
delete pup;
stat = fm.openfile();
if(stat == 0)
{
#ifdef _DEBUG1
cout<<“打开文件失败“< #endif
closesocket(socCli);
return -1;
}
#ifdef _DEBUG1
cout<<“开始接收文件!“< #endif
// fstream ffm(pup->filename.c_str() ios::binary | ios::in | ios::out);
int nZero = 0;
setsockopt(socCli SOL_SOCKET SO_RCVBUF (char *)&nZerosizeof(nZero));
while(1)
{
BlockMsg block;
recstat = socket_recv(socCli (char*)&block sizeof(BlockMsg));
if(recstat == SOCKET_ERROR)
{
cout<<“connection will be closed !“< cout< break;
}
if(block.block_n >= 0 && block.block_n <= lf.block_count)
{
fm.storge_block(block.block_n block.buf block.block_size);
if((--i) <= 0)//本线程的任务完成
break;
#ifdef _DEBUG1
cout<<“正在接收数据块“< // cout<<“ “< printf(“block.block_n = %d block.block_size = %d \n“ block.block_n block.block_size);
#endif
}
}
cout<<“接收完毕“< fm.close();
closesocket(socCli);
return 0;
}
int CClient::init()
{
if(WSAStartup(MAKEWORD( 1 1 ) &wsaData )!=0)//进行WinSocket的初始化
{
printf(“Can‘t initiates windows socket!Program stop.\n“);//初始化失败返回-1
return -1;
}
return 0;
}
void CClient::start()
{
if(init() == -1)
return;
cout<<“输入要下载的文件名(全称):“;
string name;
while(cin>>name)
{
if(name ==
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7596 2014-04-13 22:32 p2p\CClient.cpp
文件 802 2014-04-11 23:13 p2p\CClient.h
文件 4617 2014-04-13 00:17 p2p\CServer.cpp
文件 433 2014-04-11 18:56 p2p\CServer.h
文件 652801 2014-04-13 22:43 p2p\Debug\CClient.obj
文件 0 2014-04-13 22:43 p2p\Debug\CClient.sbr
文件 290979 2014-04-13 22:43 p2p\Debug\CServer.obj
文件 0 2014-04-13 22:43 p2p\Debug\CServer.sbr
文件 132535 2014-04-13 22:43 p2p\Debug\filemanager.obj
文件 0 2014-04-13 22:43 p2p\Debug\filemanager.sbr
文件 63567 2014-04-13 22:43 p2p\Debug\main.obj
文件 0 2014-04-13 22:43 p2p\Debug\main.sbr
文件 188304 2014-04-13 22:31 p2p\Debug\MD5.obj
文件 0 2014-04-13 22:31 p2p\Debug\MD5.sbr
文件 3671040 2014-04-13 22:43 p2p\Debug\p2p.bsc
文件 704557 2014-04-13 22:43 p2p\Debug\p2p.exe
文件 1084380 2014-04-13 22:43 p2p\Debug\p2p.ilk
文件 7661876 2014-04-13 22:43 p2p\Debug\p2p.pch
文件 1369088 2014-04-13 22:43 p2p\Debug\p2p.pdb
文件 238592 2014-04-13 22:43 p2p\Debug\vc60.idb
文件 217088 2014-04-13 22:43 p2p\Debug\vc60.pdb
文件 952 2014-04-12 20:17 p2p\filemanager.cpp
文件 668 2014-04-12 23:57 p2p\filemanager.h
文件 677 2014-04-10 17:50 p2p\FileManger.h
文件 380 2014-04-13 22:46 p2p\main.cpp
文件 9662 2009-12-25 09:57 p2p\MD5.cpp
文件 903 2009-12-25 09:55 p2p\MD5.h
文件 2162 2014-04-13 22:42 p2p\MSG.H
文件 4848 2014-04-11 00:56 p2p\p2p.dsp
文件 512 2014-04-08 17:23 p2p\p2p.dsw
............此处省略9个文件信息
- 上一篇:Nordic的nRF-Toolbox的源代码
- 下一篇:烽火通信校园招聘题库
相关资源
- 2.6云科技后台源码原.zip
- 樱花购物网源码.zip
- 2020年10月18日源码.zip
- 寻找锦鲤V2.2.6公众号模块源码
- exata安装教程和源码
- MQ7一氧化碳传感器源码.zip
- vfp现代物流企业管理系统源码+论文
- S32KCANbootloader上位机及下位机源码
- 数据结构实验课(全部题目+完整代码
- 哈夫曼树实现图片压缩与解压
- 车辆保险管理系统
- 百度点石充电桩数据集+源码acc=1
- 2020年最新个人发卡主程序.zip
- zabbix 源码包的安装与详细配置
- OpenGL_Nehe(NeHe中文教程)pdf+源码
- muduo源码注释非常详细
- 算法导论第三版英文原版
- ncurses库源码
- 从零开始搭建SpringCloud第五节源码及截
- 二维码手机锁机自动解锁源码
- 微信小程序拼车6.3.9
- CS231N作业源码,斯坦福机器学习课
- 仿小米官网静态页面源码
- CTP接口及开发文档.zip
- 上下位机程序源码.zip
- 开钻补单程序源码
- 《MapReduce2.0源码分析与实战编程》.
- libtiff(源码+静态库)
- VxWorks及Tornado集成开发环境的使用
- 66272每日返利分红平台整站源码 8级分
评论
共有 条评论