这个真的是,手把手写的啊。是在局域网内实现的一个,简单文件上传下载。无服务器的那种,没有做界面。思路很简单,大家,可以随便看看。
功能为,能够从多台主机上下载文件。
有兴趣的可以给它做个界面呢。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7596 2014-04-13 22:32 p2pCClient.cpp
文件 802 2014-04-11 23:13 p2pCClient.h
文件 4617 2014-04-13 00:17 p2pCServer.cpp
文件 433 2014-04-11 18:56 p2pCServer.h
文件 652801 2014-04-13 22:43 p2pDebugCClient.obj
文件 0 2014-04-13 22:43 p2pDebugCClient.sbr
文件 290979 2014-04-13 22:43 p2pDebugCServer.obj
文件 0 2014-04-13 22:43 p2pDebugCServer.sbr
文件 132535 2014-04-13 22:43 p2pDebugfilemanager.obj
文件 0 2014-04-13 22:43 p2pDebugfilemanager.sbr
文件 63567 2014-04-13 22:43 p2pDebugmain.obj
文件 0 2014-04-13 22:43 p2pDebugmain.sbr
文件 188304 2014-04-13 22:31 p2pDebugMD5.obj
文件 0 2014-04-13 22:31 p2pDebugMD5.sbr
文件 3671040 2014-04-13 22:43 p2pDebugp2p.bsc
文件 704557 2014-04-13 22:43 p2pDebugp2p.exe
文件 1084380 2014-04-13 22:43 p2pDebugp2p.ilk
文件 7661876 2014-04-13 22:43 p2pDebugp2p.pch
文件 1369088 2014-04-13 22:43 p2pDebugp2p.pdb
文件 238592 2014-04-13 22:43 p2pDebugvc60.idb
文件 217088 2014-04-13 22:43 p2pDebugvc60.pdb
文件 952 2014-04-12 20:17 p2pfilemanager.cpp
文件 668 2014-04-12 23:57 p2pfilemanager.h
文件 677 2014-04-10 17:50 p2pFileManger.h
文件 380 2014-04-13 22:46 p2pmain.cpp
文件 9662 2009-12-25 09:57 p2pMD5.cpp
文件 903 2009-12-25 09:55 p2pMD5.h
文件 2162 2014-04-13 22:42 p2pMSG.H
文件 4848 2014-04-11 00:56 p2pp2p.dsp
文件 512 2014-04-08 17:23 p2pp2p.dsw
............此处省略9个文件信息
#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
“ 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
“ 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.
“);//初始化失败返回-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 p2pCClient.cpp
文件 802 2014-04-11 23:13 p2pCClient.h
文件 4617 2014-04-13 00:17 p2pCServer.cpp
文件 433 2014-04-11 18:56 p2pCServer.h
文件 652801 2014-04-13 22:43 p2pDebugCClient.obj
文件 0 2014-04-13 22:43 p2pDebugCClient.sbr
文件 290979 2014-04-13 22:43 p2pDebugCServer.obj
文件 0 2014-04-13 22:43 p2pDebugCServer.sbr
文件 132535 2014-04-13 22:43 p2pDebugfilemanager.obj
文件 0 2014-04-13 22:43 p2pDebugfilemanager.sbr
文件 63567 2014-04-13 22:43 p2pDebugmain.obj
文件 0 2014-04-13 22:43 p2pDebugmain.sbr
文件 188304 2014-04-13 22:31 p2pDebugMD5.obj
文件 0 2014-04-13 22:31 p2pDebugMD5.sbr
文件 3671040 2014-04-13 22:43 p2pDebugp2p.bsc
文件 704557 2014-04-13 22:43 p2pDebugp2p.exe
文件 1084380 2014-04-13 22:43 p2pDebugp2p.ilk
文件 7661876 2014-04-13 22:43 p2pDebugp2p.pch
文件 1369088 2014-04-13 22:43 p2pDebugp2p.pdb
文件 238592 2014-04-13 22:43 p2pDebugvc60.idb
文件 217088 2014-04-13 22:43 p2pDebugvc60.pdb
文件 952 2014-04-12 20:17 p2pfilemanager.cpp
文件 668 2014-04-12 23:57 p2pfilemanager.h
文件 677 2014-04-10 17:50 p2pFileManger.h
文件 380 2014-04-13 22:46 p2pmain.cpp
文件 9662 2009-12-25 09:57 p2pMD5.cpp
文件 903 2009-12-25 09:55 p2pMD5.h
文件 2162 2014-04-13 22:42 p2pMSG.H
文件 4848 2014-04-11 00:56 p2pp2p.dsp
文件 512 2014-04-08 17:23 p2pp2p.dsw
............此处省略9个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)