• 大小: 8.42MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-10
  • 语言: 其他
  • 标签: p2p  源码  c++  

资源简介

这个真的是,手把手写的啊。是在局域网内实现的一个,简单文件上传下载。无服务器的那种,没有做界面。思路很简单,大家,可以随便看看。 功能为,能够从多台主机上下载文件。 有兴趣的可以给它做个界面呢。

资源截图

代码片段和文件信息


#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个文件信息

评论

共有 条评论