资源简介
用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++
评论
共有 条评论