-
大小: 5.42MB文件類型: .rar金幣: 2下載: 0 次發布日期: 2023-09-26
- 語言: C/C++
- 標簽: socket,MFC??
資源簡介
用MFC實現服務端與客戶端之間的文件傳輸,可支持上傳下載,采用多線程控制,并可實現多個客戶端連接一個服務器

代碼片段和文件信息
//////////////////////////////////////////////////
//?TCPServer.cpp文件
#include?“InitSock.h“
#include?
#include??
#include?
CInitSock?initSock; //?初始化Winsock庫
#define?M_SIZE?1024
typedef?struct??//定義回調函數參數結構體
{
????SOCKET?sClient;
????char?filepath[100];
char?ipAddress[20];
char?_fileArray[1000];
}threadInfo;
void?ThreadFunc(?LPVOID?lpParam?)?//回調函數
{
????char?sendBuf[M_SIZE];
char?recvBuf[M_SIZE];
char?filename[100];
char?filepath[100];
char?_fileArray[1000];
FILE?*fp;
int?n;
size_t?ret;
long?file_size?=?0;
char?file_size_c[20];
????SOCKET?sClient;?
int?len;
threadInfo*?pInfo=(threadInfo*)lpParam;//提取參數信息
????sClient?=?pInfo?->sClient;
strcpy(filepath?pInfo?->filepath);
strcpy(_fileArray?pInfo?->_fileArray);
sprintf(sendBuf“IP地址:?%s?“?pInfo?->ipAddress?);
????send(sClient?sendBuf?strlen(sendBuf)+1?0);//發送信息到客戶端
????recv(sClientrecvBufM_SIZE0);//接收客戶端數據,這里接到的是操作標識
switch(recvBuf[0])?
{
case?‘U‘:
{
printf(“IP為%s請求上傳服務;\n“pInfo?->ipAddress);
????//接收文件名
recv(sClientfilename1000);
int?size?=?0;
strcat(?filepath?“\\“);
strcat(?filepath?filename?);
if((fp?=?fopen(filepath“wb“))?==?NULL)
{
return?;
}
while(1)
{
//接收文件
????????????????ret=recv(sClientrecvBufM_SIZE0);
if(ret?==?0)
{
break;
}
fwrite(recvBuf1retfp);
size?+=?ret;
}
printf(“文件%s上傳完成大小為%d?byte\n“filename?size);
fclose(fp);
}
break;
case?‘D‘:
{
printf(“IP為%s請求下載服務;\n“pInfo?->ipAddress?);
recv(sClientfilename1000);
strcat(?filepath?“\\“);
strcat(?filepath?filename?);
if((fp=fopen(filepath“rb“))==NULL)
closesocket(sClient);??//如果請求的文件不存在,則關閉連接
else
{
fseek(fp0SEEK_END);??//獲取文件大小然后發給客戶端
file_size?=?ftell(fp);
fseek(fp0SEEK_SET);
_i64toa(?file_size?file_size_c?10?);//將int(file_size)轉化為string(file_size_c)10進制
send(sClient?file_size_c?strlen(file_size_c)?+?1?0);//發送文件大小?
printf(“下載文件%s,大小為?%s?byte\n“filename?file_size_c);
while(1)
{
n=fread(sendBuf1M_SIZEfp);
if(n?==?0)
{
break;
}
send(sClientsendBufn0);//發送文件給客戶端
}
fclose(fp);
}
}
break;
case?‘Q‘:
{
printf(“IP為%s請求查詢服務;\n“pInfo?->ipAddress);
while(1)
{
len?=?send(sClient?_fileArray?strlen(_fileArray)+1?0);?//把共享路徑的所有文件名發給客戶端
if(len?==?-1)
{
break;
}
}
}
break;
default:
break;
}
????closesocket(sClient);
}
//socket
SOCKET?create_socket()
{
//?創建套節字
SOCKET?sListen?=?::socket(AF_INET?SOCK_STREAM?IPPROTO_TCP);
if(sListen?==?INVALID_SOCKET)
{
printf(“Failed?socket()?\n“);
return?0;
}
//?填充sockaddr_in結構
sockaddr_in?sin;
sin.sin_family?=?AF_INET;
sin.sin_port?=?htons(6000);
sin.sin_addr.S_un.S_addr?=?INADDR_ANY;
//?綁定這個套節字到一個本
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????1975296??2012-08-16?08:37??TCP有界面\TCPServer\Debug\TCPServer.bsc
?????文件?????204901??2012-08-16?08:37??TCP有界面\TCPServer\Debug\TCPServer.exe
?????文件?????234736??2012-08-16?08:37??TCP有界面\TCPServer\Debug\TCPServer.ilk
?????文件??????25550??2012-08-16?08:37??TCP有界面\TCPServer\Debug\TCPServer.obj
?????文件??????43520??2011-08-01?20:25??TCP有界面\TCPServer\Debug\TCPServer.opt
?????文件????4653492??2012-08-16?08:37??TCP有界面\TCPServer\Debug\TCPServer.pch
?????文件?????451584??2012-08-16?08:37??TCP有界面\TCPServer\Debug\TCPServer.pdb
?????文件??????????0??2012-08-16?08:37??TCP有界面\TCPServer\Debug\TCPServer.sbr
?????文件?????148480??2012-08-17?11:13??TCP有界面\TCPServer\Debug\vc60.idb
?????文件??????77824??2012-08-16?08:37??TCP有界面\TCPServer\Debug\vc60.pdb
?????文件????????512??2011-08-02?08:41??TCP有界面\TCPServer\initCriticalSection.h
?????文件????????461??2005-07-19?21:30??TCP有界面\TCPServer\initsock.h
?????文件???????5447??2012-08-15?08:32??TCP有界面\TCPServer\TCPServer.cpp
?????文件???????4455??2011-08-03?12:53??TCP有界面\TCPServer\TCPServer.dsp
?????文件????????541??2005-07-21?12:47??TCP有界面\TCPServer\TCPServer.dsw
?????文件??????91136??2012-08-17?11:30??TCP有界面\TCPServer\TCPServer.ncb
?????文件??????48640??2012-08-17?11:30??TCP有界面\TCPServer\TCPServer.opt
?????文件????????252??2012-08-17?11:13??TCP有界面\TCPServer\TCPServer.plg
?????文件??????12586??2011-08-03?17:17??TCP有界面\UIClient\Debug\RCa00436
?????文件?????105948??2012-08-16?08:37??TCP有界面\UIClient\Debug\StdAfx.obj
?????文件????1375061??2012-08-16?08:37??TCP有界面\UIClient\Debug\StdAfx.sbr
?????文件????3261440??2012-08-16?09:31??TCP有界面\UIClient\Debug\UIClient.bsc
?????文件?????118883??2012-08-16?09:31??TCP有界面\UIClient\Debug\UIClient.exe
?????文件?????251584??2012-08-16?09:31??TCP有界面\UIClient\Debug\UIClient.ilk
?????文件??????20229??2012-08-16?08:37??TCP有界面\UIClient\Debug\UIClient.obj
?????文件????6878208??2012-08-16?08:37??TCP有界面\UIClient\Debug\UIClient.pch
?????文件?????394240??2012-08-16?09:31??TCP有界面\UIClient\Debug\UIClient.pdb
?????文件???????3216??2012-08-16?08:37??TCP有界面\UIClient\Debug\UIClient.res
?????文件??????????0??2012-08-16?08:37??TCP有界面\UIClient\Debug\UIClient.sbr
?????文件??????58144??2012-08-16?09:31??TCP有界面\UIClient\Debug\UIClientDlg.obj
............此處省略31個文件信息
- 上一篇:進程調度模擬算法C++實現
- 下一篇:彈球 OPenGL C++
評論
共有 條評論