FTP文件传输的设计与实现Word格式.doc
- 文档编号:13161019
- 上传时间:2022-10-07
- 格式:DOC
- 页数:15
- 大小:335KB
FTP文件传输的设计与实现Word格式.doc
《FTP文件传输的设计与实现Word格式.doc》由会员分享,可在线阅读,更多相关《FTP文件传输的设计与实现Word格式.doc(15页珍藏版)》请在冰豆网上搜索。
socketinitializefailed!
\n"
);
return(-1);
}
sockSrv=socket(AF_INET,SOCK_STREAM,0);
//定义为面向连接的,返回值送给sockSrv
if(sockSrv==SOCKET_ERROR)
{
printf("
socketcreatefailed!
\n"
WSACleanup();
//中止WindowsSocketsDLL的使用
return(-1);
SOCKADDR_INaddrSrv;
//TCP/IP使用SOCKADDR_IN定义地址
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//计算机IP地址
addrSrv.sin_port=htons(PORT);
//协议端口号
addrSrv.sin_family=AF_INET;
//地址所属协议簇
//绑定端口
if(bind(sockSrv,(structsockaddrFAR*)&
addrSrv,sizeof(addrSrv))==SOCKET_ERROR)
BindError"
return
(1);
}
intSendFileRecord(SOCKETdatatcps,WIN32_FIND_DATA*pfd)//用于回复给客户端
charfilerecord[MAX_PATH+32];
FILETIMEft;
FileTimeToLocalFileTime(&
pfd->
ftLastWriteTime,&
ft);
//将一个FILETIME结构转换成本地时间
SYSTEMTIMElastwtime;
//系统时间
FileTimeToSystemTime(&
ft,&
lastwtime);
//根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构
char*dir=pfd->
dwFileAttributes&
FILE_ATTRIBUTE_DIRECTORY?
"
<
DIR>
:
"
;
sprintf(filerecord,"
%04d-%02d-%02d%02d:
%02d%5s%10d%-20s\n"
lastwtime.wYear,
lastwtime.wMonth,
lastwtime.wDay,
lastwtime.wHour,
lastwtime.wMinute,
dir,
pfd->
nFileSizeLow,
cFileName);
if(send(datatcps,filerecord,strlen(filerecord),0)==SOCKET_ERROR)//发送回复失败
Erroroccurswhensendingfilelist!
return0;
return1;
//发送主机文件目录
intSendFileList(SOCKETdatatcps)
HANDLEhff;
WIN32_FIND_DATAfd;
//获取和更改文件属性
hff=FindFirstFile("
*"
&
fd);
//搜索文件
if(hff==INVALID_HANDLE_VALUE)//搜索无效返回值
constchar*errstr="
can'
tlistfiles!
cout<
listfileerror!
endl;
if(send(datatcps,errstr,strlen(errstr),0)==SOCKET_ERROR)
{
cout<
erroroccurswhensendingfilelist!
}
closesocket(datatcps);
BOOLfMoreFiles=TRUE;
//BOOL型,返回值为大于0的整数时为TRUE,返回值为0时候,为FALSE,返回值为-1时为ERROR。
while(fMoreFiles)
//发送此项文件信息
if(!
SendFileRecord(datatcps,&
fd))//发送失败
closesocket(datatcps);
return0;
//搜索下一个文件
fMoreFiles=FindNextFile(hff,&
closesocket(datatcps);
//发送数据
intSendFile(SOCKETdatatcps,FILE*file)//发送文件
printf("
sendingfiledata.."
for(;
//从文件中循环读取数据并发送客户端
intr=fread(buf_send,1,1024,file);
if(send(datatcps,buf_send,r,0)==SOCKET_ERROR)
printf("
losttheconnectiontoclient!
if(r<
1024)//文件传送结束
break;
done\n"
DWORDProcessCmd()
if(listen(sockSrv,5)<
0)//监听信号
Listenerror!
cout<
Listeningfortherequest……"
SOCKADDR_INaddrclient;
//定义用于返回客户机端地址的结构
intlen=(sizeof(SOCKADDR_IN));
while
(1)
SOCKETsockconn=accept(sockSrv,(SOCKADDR*)&
addrclient,&
len);
//接受请求,产生新的套接字
if(sockconn==INVALID_SOCKET)
continue;
elsecout<
connectingfromclient"
while(true)
charfilename[20];
memset(buf_rec,0,1024);
memset(buf_send,0,1024);
if(recv(sockconn,buf_rec,1024,0)<
=0)
{
break;
}
endl<
thecommandis:
buf_rec<
if(strncmp(buf_rec,"
dir"
3)!
=0&
&
strncmp(buf_rec,"
get"
put"
continue;
//有一个请求正确执行下面语句
3)==0)
strcpy(buf_send,"
dir-ing\n"
send(sockconn,buf_send,1024,0);
SendFileList(sockconn);
//发送当前所有文件名
}//dir
if(strncmp(buf_rec,"
{
strcpy(filename,buf_rec+4);
cout<
filename;
FILE*file;
//处理下载文件请求
file=fopen(filename,"
rb"
//打开下载的文件
if(file)
{
sprintf(buf_send,"
getfile%s\n"
filename);
if(!
send(sockconn,buf_send,1024,0))
{fclose(file);
return0;
else
{//创建额外数据连接传送数据
if(!
SendFile(sockconn,file))
return0;
fclose(file);
}//file
else//打开文件失败
{
strcpy(buf_send,"
topenfile!
if(send(sockconn,buf_send,1024,0))
return0;
}
}//get处理客户端的下载请求
FILE*fd;
intcount;
fd=fopen(filename,"
wb"
if(fd==NULL)
printf("
openfile%sforweitefailed!
continue;
}
sprintf(buf_send,"
putfile%s"
if(!
{ fclose(fd);
return0;
while((count=recv(sockconn,buf_rec,1024,0))>
0)
fwrite(buf_rec,sizeof(char),coun
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FTP 文件传输 设计 实现