(完整)实验一-文件传输协议设计要点
- 格式:doc
- 大小:201.52 KB
- 文档页数:15
文本传输协议文本传输协议(Text Transfer Protocol,TTP)是计算机网络中用来传输文本数据的一种协议。
它是建立在传输控制协议(Transmission Control Protocol,TCP)之上的应用层协议,用于在客户端和服务器之间进行高效的文本数据传输。
文本传输协议的设计目的是为了确保文本数据在传输过程中的可靠性和完整性。
它使用了TCP的可靠性机制,通过建立连接、确认数据包的发送与接收,以及校验和等技术手段,来保证文本数据能够准确无误地传输到目的地。
文本传输协议采用了基于请求和响应的方式来进行通信。
客户端向服务器发送一个请求,请求的内容包括所要获取的文本数据的详细信息,如文件名、位置等。
服务器接收到请求后,根据请求的内容找到相应的文本数据,并将其发送给客户端。
客户端收到服务器发送的文本数据后,进行处理或显示,完成客户端与服务器之间的文本数据传输。
文本传输协议具有以下特点:1. 可靠性:通过使用TCP的可靠性机制,确保文本数据能够准确无误地传输到目的地,降低数据丢失和错误的概率。
2. 高效性:文本传输协议使用基于请求和响应的通信方式,能够在客户端和服务器之间进行高效的通信,提高数据传输的速度。
3. 灵活性:文本传输协议不限制文本数据的格式和大小,可以传输各种类型的文本数据,如普通文本、富文本、代码等。
4. 安全性:文本传输协议可以结合其他安全机制,如加密技术、认证机制等,来保护传输的文本数据的安全性。
文本传输协议在互联网中得到了广泛的应用。
它被用于电子邮件系统、即时通讯工具、文件传输工具等各种应用场景中,为用户提供了高效、可靠的文本数据传输服务。
总之,文本传输协议是建立在TCP之上的一种用于传输文本数据的协议。
通过使用TCP的可靠性机制,文本传输协议能够确保文本数据能够准确无误地传输到目的地,同时保证高效性、灵活性和安全性。
在互联网中的各种应用场景中,文本传输协议发挥着重要的作用,为用户提供了高质量的文本数据传输服务。
一、实验目的1. 理解文件传送协议的基本原理和流程。
2. 掌握常用的文件传送协议,如FTP、TFTP等。
3. 学习使用文件传送协议进行文件的上传和下载。
4. 了解文件传送协议在实际应用中的优势和局限性。
二、实验环境1. 操作系统:Windows 102. 软件环境:Cygwin、FTP Server、FTP Client3. 网络环境:局域网三、实验内容1. FTP协议实验2. TFTP协议实验四、实验步骤1. FTP协议实验(1)搭建FTP服务器1)在Cygwin中安装FTP服务器。
2)配置FTP服务器,设置用户名和密码。
3)启动FTP服务器。
(2)使用FTP客户端连接FTP服务器1)在Cygwin中安装FTP客户端。
2)使用FTP客户端连接到FTP服务器。
3)登录FTP服务器。
(3)上传和下载文件1)在FTP客户端选择要上传的文件。
2)使用FTP客户端将文件上传到FTP服务器。
3)在FTP客户端选择要下载的文件。
4)使用FTP客户端将文件从FTP服务器下载到本地。
2. TFTP协议实验(1)搭建TFTP服务器1)在Cygwin中安装TFTP服务器。
2)配置TFTP服务器,设置共享目录。
3)启动TFTP服务器。
(2)使用TFTP客户端连接TFTP服务器1)在Cygwin中安装TFTP客户端。
2)使用TFTP客户端连接到TFTP服务器。
(3)上传和下载文件1)在TFTP客户端选择要上传的文件。
2)使用TFTP客户端将文件上传到TFTP服务器。
3)在TFTP客户端选择要下载的文件。
4)使用TFTP客户端将文件从TFTP服务器下载到本地。
五、实验结果与分析1. FTP协议实验实验结果表明,使用FTP协议可以方便地进行文件的上传和下载。
FTP服务器和客户端的配置较为简单,易于操作。
但在实际应用中,FTP协议存在以下局限性:(1)FTP协议不是加密传输,存在安全隐患。
(2)FTP协议传输速度较慢。
(3)FTP协议不支持断点续传。
ftp实验报告FTP实验报告一、引言FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上进行文件传输的标准协议。
它基于客户端-服务器模型,通过在客户端和服务器之间建立连接,实现文件的上传和下载。
本实验旨在通过搭建FTP服务器和客户端,探索FTP协议的工作原理,并测试其性能和稳定性。
二、实验环境和工具本次实验使用的环境是一台Windows操作系统的计算机,实验工具包括FileZilla Server和FileZilla Client。
三、实验步骤1. 搭建FTP服务器首先,在计算机上安装FileZilla Server软件。
安装完成后,打开软件并进行配置。
配置包括设置服务器的监听IP地址和端口号,设置用户账号和密码,以及设置共享文件夹的路径。
配置完成后,启动FTP服务器。
2. 配置FTP客户端在另一台计算机上安装FileZilla Client软件。
安装完成后,打开软件并进行配置。
配置包括设置FTP服务器的地址、端口号、用户名和密码。
配置完成后,连接到FTP服务器。
3. 文件上传和下载在FTP客户端上,选择需要上传的文件,并将其拖拽到服务器的文件列表中。
文件上传完成后,可以在服务器端的共享文件夹中看到该文件。
同样地,在FTP客户端上选择需要下载的文件,并将其拖拽到本地文件列表中。
文件下载完成后,可以在本地计算机的指定位置找到该文件。
四、实验结果和分析1. 性能测试在实验过程中,我们测试了FTP协议的性能。
通过上传和下载不同大小的文件,我们记录了文件传输所需的时间,并计算了传输速度。
实验结果显示,随着文件大小的增加,传输速度逐渐下降。
这是因为较大的文件需要更多的时间来传输,而网络带宽是有限的。
2. 稳定性测试我们还测试了FTP协议的稳定性。
在大量并发上传和下载文件的情况下,观察FTP服务器和客户端的响应情况。
实验结果显示,当并发操作过多时,FTP 服务器的响应时间会增加,甚至出现连接超时的情况。
文件传输协议F T P服务配置实验work Information Technology Company.2020YEAR昆明理工大学(计算机网络)实验报告实验名称文件传输协议FTP服务配置实验实验时间 2012 年 5 月日专业班级电信091 姓名学号成绩教师签名实验目的:1、了解FTP服务的体系结构与工作原理2、掌握利用Microsoft的IIS实现FTP服务的基本配置3、熟悉常见的FTP命令的使用实验原理:1、文件传输协议(FTP)是用于在网络上进行文件传输的一套标准协议,它属于网络协议的应用层。
FTP的主要功能是在主机间高速可靠的传输文件。
2、FTP服务一般运行在20、21两个端口,端口20用于在客户端和服务器之间进行传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。
当数据通过数据流传输时,控制流处于空闲状态。
当控制流空闲很长时间后,客户端的防火墙会把其会话置为超时,这样当大量的数据通过防火墙时,会产生一些问题。
此时,虽然文件可以成功的传输,但因为控制会话会被防火墙断开,传输会产生一些错误。
FTP实现的目标:1)促进文件的共享(包括计算机程序或者数据)2)鼓励间接的使用远程计算机3)向用户屏蔽不同主机中各种文件存储系统的细节4)可靠和高效的传输数据3、FTP命令:.ascii:使用ascii类型传输方式。
.bell:每个命令执行完毕后计算机响铃一次。
.bin:使用二进制文件传输方式。
.bye:退出ftp会话过程。
.case:在使用mget时,将远程主机文件名中的大写转为小写字母。
.cd remote-dir:进入远程主机目录。
.cdup:进入远程主机目录的父目录。
.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。
.close:中断与远程服务器的ftp会话(与open对应)。
.cr:使用asscii方式传输文件时,将回车换行转换为回行。
文件传输协议书怎么写文件传输协议书是一份用于规范文件传输过程的书面文件,旨在确保文件的安全、准确和高效传输。
下面是一个关于文件传输协议书的示例,共计约1000字:文件传输协议书一、背景概述文件传输协议书旨在确保文件的安全、准确和高效传输,减少传输过程中的错误和失误。
本协议适用于我们公司内部文件的传输,包括但不限于电子文档、图像、音频和视频文件等。
通过明确的规定和操作流程,我们将确保传输过程的可控性和安全性。
二、协议目标1.确保文件传输的准确性:文件在传输过程中不应出现错误或损坏,接收方应准确地接收到发送方传输的文件。
2.保障文件传输的机密性:对于涉及公司机密信息的文件,应采取相应的加密和安全措施,确保文件内容不被未授权人员访问和泄露。
3.提高文件传输的效率:通过优化传输过程,减少传输时间,提高文件传输的效率和及时性。
4.规范文件传输的操作流程:明确文件传输的操作流程和责任分工,避免因误操作或不当处理而导致的问题和纠纷。
三、协议内容1.文件格式和命名规范:1.1 文件应使用常见的文件格式,如.txt、.docx、.xlsx等,以确保接收方能够正确打开和阅读文件。
1.2 文件命名应清晰明确,包括文件的相关信息,如文件名、版本号、创建日期等,以方便文件的管理与查找。
2.文件传输方式:2.1 内部网络传输:对于公司内部使用的文件传输,应优先使用内部网络进行传输,保证传输速度和安全性。
2.2 外部网络传输:对于与外部单位的交流和合作,涉及到文件传输的,应采用安全可靠的外部网络传输方式,如通过加密的邮件附件或安全的文件传输协议等。
3.文件加密与解密:3.1 对于涉及公司机密信息的文件,应采取加密措施确保传输的安全性。
发送方应在传输前对文件进行加密,并提供正确的解密密码给接收方。
3.2 接收方在接收到加密文件后,应进行解密操作,确保文件的可读性。
4.文件传输操作流程:4.1 发送方应进行文件上传到指定的传输平台,并填写相关信息,如文件名、版本号等。
综合课程设计报告基于 TCP协议的文件传输系统学生姓名:指导教师:所在系:所学专业:年级:2011年6月目录摘要⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2 1、的相关知 (3)1.1 、通信的模式 (3)1.1.1 、的可靠性 (3)1.2.1 、 TCP/IP 的网体系构 (3)1.2.2 、 TCP/IP 网 (4)1.2 . 3、 TCP——控制 (4)2、winsock 控件 (5)2.1.1 、 winsock 的重要属性、方法和事件 (5)2.1.2 、 winsock 控件通信的工作原理 (7)3、程序与 (8)3.1 、程序 (8)3.1.1 、体 (8)3.1.2 、模 (9)3.2 、程序 (10)3.2.1 、工作原理 (10)3.2.2 、服器端主程序 (11)3.2.3 、客端主程序 (14)4、 (17)参考文献...........................................................................................................17.成定 (18)基于TCP协议的文件传输系统摘要随着网络的普及,网络编程显得尤其重要。
本实验使用Winsock 控件实现两台计算机间的文件传输,描述了Winsock 控件的使用方法及有关文件传输的算法。
随着计算机网络的迅速发展,人们的生活越来越离不开网络,如今网络编程已成为计算机发展的热点,而在众多的网络通信中,又以TCP/IP 协议最为流行。
本文讨论的Winsock 控件,提供了访问TCP/IP 网络的捷径,使用它可以不必了解TCP/IP 的细节和调用Winsock API ,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信,进行文件传输了。
同时为了便于传输文件过程中的中断现象,在实验时应该充分考虑断点续传问题,即中断文件传输后已经传输的文件不丢失,等到再传时,能继续接着传送。
FTP协议实验报告●实验目的1、在Linux系统上完成一个文件传输协议(FTP)的简单实现。
2、深入理解FTP协议的原理和协议细节。
3、学会利用Socket接口设计实现简单应用层协议。
4、掌握TCP/IP网络应用程序的基本设计方法和实现技巧。
●实验原理1、FTP协议FTP是File Transfer Protocol,即文件传输协议的缩写。
该协议用于在两台计算机之间传送文件。
FTP会话包括了两个通道,一个是控制通道,一个是数据通道。
控制通道是和FTP 服务器进行沟通的通道,连接FTP服务器,发送FTP指令;数据通道则是和FTP服务器进行文件传输或者获取文件列表的通道。
FTP协议中,控制连接的各种指令均由客户端主动发起,而数据连接有两种工作方式:主动方式(PORT方式)和被动方式(PASV方式)。
主动方式下,FTP客户端首先和FTP服务器的控制通道对应端口(一般为21)建立连接,通过控制通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。
PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据。
在传输数据的时候,FTP服务器必须和客户端建立一个新的连接,服务器通过自己的TCP 20端口发送数据。
被动方式下,建立控制通道的过程和主动方式类似,当客户端通过这个通道发送PASV命令的时候,FTP server打开一个位于1024-5000之间的随机端口并且通知客户端,然后客户端与服务器之间将通过这个端口进行数据的传送。
2、socket编程(1)什么是SocketSocket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程。
网络的Socket 数据传输是一种特殊的I/O,Socket也是一种文件描述符。
(2)Socket的建立为了建立Socket,程序可以调用Socket函数,该函数返回一个socket描述符。
Socket 描述符是一个指向内部数据结构的指针,它指向描述符表入口。
文件传输协议的简单设计与实现
课程设计内容:
学会利用已有网络环境设计并实现简单应用层协议,掌握TCP/IP网络应用程序基本的设计方法和技巧,加深对C/S工作模式的认识。
用winsocket编程接口编写两个程序,分别为客户端程序(ftpclient)和服务器程序(ftpserver)。
程序应实现下述命令功能:
get: 获取服务器一个文件
put:给服务器传送一个文件
pwd: 显示服务器当前目录
cd: 改变服务器当前目录
?: 显示命令列表
quit:退出程序并返回
课程设计基本要求
(1)加深对网络原理的理解,提高综合运用本课程所学知识的能力
(2)培养查阅手册及文献资料的能力,培养独立思考,深入研究、分析问题、解决问题能力
(3)通过实际分析设计、编程调试,掌握计算机网络通信的基本规程,以及协议的利用方法,体会体系结构分层的思路。
(4)按要求编写课程设计报告书,能正确阐述设计和设计结果、正确绘制系统和程序框图。
(5)第15周提交课程设计报告。
实验一:文件传输协议的设计与实现目录1.实验设计目的和要求2.背景知识3.课程设计分析4.程序清单5.运行结果6.总结1.课程设计目的和要求文件传输是各种计算机的网络的基本功能,文件传送协议是一种最基本的应用层协议。
它是按照客户或服务器模式进行的工作,提供交式的访问。
是INTERNRT使用最广泛的协议之一。
以及深入了解计算机网络是建立在TCP/IP网络体系结构上。
用 socket 编程接口编写俩个程序,分别为客户程序和服务器程序1.掌握TCP/IP 网络应用程序基本的设计方法;2.用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c);3.撰写课程设计说明书。
装订后的课程设计说明书不少于10面(含封面、任务书、目录、正文、参考文献、成绩评定表、封底)。
2.背景知识第一个FTP的RFC由A.K.Bhushan 在1971年提出,同时由MIT 与Harvard实验实现,RFC 172提供了主机间文件传输的一个用户级协议。
长期发展过程由于底层协议从NCP改变为TCP,RFC765定义了采用TCP的FCP.FTP协议在今天已经发展成熟,应用也越来越广很多开发的比较成熟的FTP 客户端软件已经得到了广泛的应用.3.课程设计分析Server端Client端创建ServerSocket对象,在某端口提供监听服务Client端等待来自Client端的服务请求接受Client端的请求,用返回的创建Socket对象,向ServerSocket建立连接的监听端口请求通过向Socket中读写数据来通过向新的Socket中读写数与Client端通信据来与Server端通信关闭Socket,结束与Server端的通信关闭Client的通信,等待其他请求关闭ServerSocket对象,结束监听服务4.程序清单:1.服务器源代码:#include <Winsock2.h>#include <stdio.h>#include <iostream>using namespace std;#pragma comment(lib, "wsock32.lib")#define PORT 4523char buf_send[1024];char buf_rec[1024];SOCKET sockSrv;//socket初始化DWORD CreateSocket(){WSADATA WSAData;//WSADATA结构被用来保存函数WSAStartup返回的Windows Sockets初始化信息if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)//WSAStartup完成winsock的初始化{printf("socket initialize failed!\n");return (-1);}sockSrv=socket(AF_INET,SOCK_STREAM,0);//定义为面向连接的,返回值送给sockSrvif(sockSrv==SOCKET_ERROR){printf("socket create failed ! \n");WSACleanup();//中止Windows Sockets DLL的使用return(-1);}SOCKADDR_IN addrSrv;//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,(struct sockaddr FAR *)&addrSrv,sizeof(addrSrv))==SOCKET_ERROR){printf("Bind Error");return(-1);}return (1);}int SendFileRecord(SOCKET datatcps,WIN32_FIND_DATA *pfd)//用于回复给客户端{char filerecord[MAX_PATH+32];FILETIME ft;FileTimeToLocalFileTime(&pfd->ftLastWriteTime,&ft);//将一个FILETIME结构转换成本地时间SYSTEMTIME lastwtime;//系统时间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,pfd->cFileName);if(send(datatcps,filerecord,strlen(filerecord),0)==SOCKET_ERROR)//发送回复失败{printf("Error occurs when sending file list!\n");return 0;}return 1;}//发送主机文件目录int SendFileList(SOCKET datatcps){HANDLE hff;WIN32_FIND_DATA fd; //获取和更改文件属性hff=FindFirstFile("*",&fd);//搜索文件if(hff==INVALID_HANDLE_VALUE)//搜索无效返回值{const char *errstr="can't list files!\n";cout<<"list file error!"<<endl;if(send(datatcps,errstr,strlen(errstr),0)==SOCKET_ERROR){cout<<"error occurs when sending file list!"<<endl;}closesocket(datatcps);return 0;}BOOL fMoreFiles=TRUE;//BOOL型,返回值为大于0的整数时为TRUE,返回值为0时候,为FALSE,返回值为-1时为ERROR。
while(fMoreFiles){//发送此项文件信息if(!SendFileRecord(datatcps,&fd))//发送失败{closesocket(datatcps);return 0;}//搜索下一个文件fMoreFiles=FindNextFile(hff,&fd);}closesocket(datatcps);return 1;}//发送数据int SendFile(SOCKET datatcps,FILE* file)//发送文件{printf("sending file data..");for(;;)//从文件中循环读取数据并发送客户端{int r=fread(buf_send,1,1024,file);if(send(datatcps,buf_send,r,0)==SOCKET_ERROR){printf("lost the connection to client!\n");closesocket(datatcps);return 0;}if(r<1024)//文件传送结束break;}closesocket(datatcps);printf("done\n");return 1;}DWORD ProcessCmd(){if(listen(sockSrv,5)<0)//监听信号{cout<<"Listen error!"<<endl;return(-1);}cout<<"Listening for the request……"<<endl;SOCKADDR_IN addrclient;//定义用于返回客户机端地址的结构int len=(sizeof(SOCKADDR_IN));while(1){SOCKET sockconn=accept(sockSrv,(SOCKADDR*)&addrclient,&len);//接受请求,产生新的套接字if(sockconn==INVALID_SOCKET)continue;else cout<<"connecting from client"<<endl;while(true){char filename[20];memset(buf_rec,0,1024);memset(buf_send,0,1024);if(recv(sockconn,buf_rec,1024,0)<=0){break;}cout<<endl<<"the command is:"<<buf_rec<<endl;if(strncmp(buf_rec,"dir",3)!=0&&strncmp(buf_rec,"get",3)!=0&&strncmp(buf_rec,"put",3)!= 0)continue;//有一个请求正确执行下面语句if(strncmp(buf_rec,"dir",3)==0){strcpy(buf_send,"dir-ing\n");send(sockconn,buf_send,1024,0);SendFileList(sockconn);//发送当前所有文件名}//dirif (strncmp(buf_rec,"get",3)==0){strcpy(filename,buf_rec+4);cout<<filename;FILE *file;//处理下载文件请求file=fopen(filename,"rb");//打开下载的文件if(file){sprintf(buf_send,"get file %s\n",filename);if(!send(sockconn,buf_send,1024,0)){fclose(file);return 0;}else{//创建额外数据连接传送数据if(!SendFile(sockconn,file))return 0;fclose(file);}}//fileelse//打开文件失败{strcpy(buf_send,"can't open file!\n");if(send(sockconn,buf_send,1024,0))return 0;}}//get 处理客户端的下载请求if(strncmp(buf_rec,"put",3)==0){FILE *fd;int count;strcpy(filename,buf_rec+4);fd=fopen(filename,"wb");if(fd==NULL){printf("open file %s for weite failed!\n",filename);continue;}sprintf(buf_send,"put file %s",filename);if(!send(sockconn,buf_send,1024,0)){ fclose(fd);return 0;}while((count=recv(sockconn,buf_rec,1024,0))>0)fwrite(buf_rec,sizeof(char),count,fd);fclose(fd);continue;}//put 处理客户端的上传请求}}}int main(){CreateSocket();ProcessCmd();return(1);}2. 客户端程序源代码:#include <Winsock2.h>#include <stdio.h>#include <iostream>using namespace std;//使用名称空间std#pragma comment(lib, "wsock32.lib")//将WinLib.lib库加入到工程中进行编译#define PORT 4523//定义端口号为4523char send_str[1024];char rec_str[1024];char IP[20];char filename[20];SOCKET sockClient;SOCKADDR_IN addrServer;//定义表示地址的结构体addrServer,用来表示本地地址//创建套接字DWORD CreateSock(){//本地信息addrServer.sin_family=AF_INET;//地址所属协议簇//AF表示ADDRESS FAMILY 地址族// htons的功能:将一个无符号短整型数值转换为网络字节序addrServer.sin_port=htons(PORT);//协议端口号WSADATA WSAData;//WSADATA结构被用来保存函数WSAStartup返回的Windows Sockets初始化信息WORD wVersionRequsdted;int err;wVersionRequsdted=MAKEWORD(2,2);err=WSAStartup(wVersionRequsdted,&WSAData);if(err!=0){printf("sock init fail!\n");return(-1);}cout<<"please input the IP of host:";scanf("%s",&IP);addrServer.sin_addr.s_addr=inet_addr(IP);//计算机IP地址return(1);}DWORD ConnectServer() //连接服务器{sockClient=socket(AF_INET,SOCK_STREAM,0);//创建套接字,SOCK_STREAM为面向连接型if(sockClient==SOCKET_ERROR){printf("sock create fail! \n");WSACleanup();//中止Windows Sockets DLL的使用.return(-1);}if(connect(sockClient,(struct sockaddr *)&addrServer,sizeof(addrServer))==SOCKET_ERROR)//如果请求建立连接错误{printf("Connect fail \n");memset(IP,0,20);return(-1);}return(1);}void help(){cout<<"help List:"<<endl;cout<<"dir………………………………directory list "<<endl;cout<<"get………………………………download files"<<endl;cout<<"put………………………………upload files "<<endl;cout<<"quit………………………………exit !"<<endl;}//list读取服务器列表void list(SOCKET sock){int nRead;while(true){nRead=recv(sock,rec_str,1024,0);//从一个套接口接收数据if(nRead==SOCKET_ERROR){cout<<"read response error!"<<endl;exit(1);}if(nRead==0)//数据读取结束break;//显示数据rec_str[nRead]='\0';printf("%s",rec_str);}}int SendFile(SOCKET datatcps,FILE* file)//SOCKET datatcps定义变量数据连接套接字{cout<<"sending file data.."<<endl;for(;;){int r=fread(send_str,1,1024,file);//从一个流中读数据if(send(datatcps,send_str,r,0)==SOCKET_ERROR){printf("lost the connection to client!\n");closesocket(datatcps);return 0;}if(r<1024)//文件传送结束break;}closesocket(datatcps);//关闭接口printf("done\n");return(1);}int Cprocess(){int count;char order[10];char param[20];char command[30];FILE *fd;FILE *fd2;command[0]='\0';CreateSock();ConnectServer();cout<<"please input order :"<<endl;memset(order,0,10);//初始化为0memset(param,0,20);//初始化为0memset(command,0,30);//初始化为0memset(rec_str,0,1024);//初始化为0memset(send_str,0,1024);//初始化为0cin>>order;strcat(command,order);if(strncmp(order,"get",3)==0||strncmp(order,"put",3)==0)//输入请求,有一个输入要求正确,输入目标文件名{cin>>param;strcat(command," ");strcat(command,param);}cout<<command<<endl;strcpy(send_str,command);if(send(sockClient,send_str,sizeof(send_str),0)<0){cout<<"send data error!"<<endl;closesocket(sockClient);WSACleanup();return 0;}recv(sockClient,rec_str,1024,0);//接受链接数据,放入rec_strcout<<rec_str<<endl;if(strncmp(command,"quit",4)==0){closesocket(sockClient);WSACleanup();return 0;}//quitif(strncmp(rec_str,"dir",3)==0){list(sockClient);}//dirif(strncmp(rec_str,"get",3)==0){fd=fopen(param,"wb");//使用二进制方式创建并打开名为param的文件if(fd==NULL) //打开失败{printf("open file %s for weite failed!\n",param);return 0;}while((count=recv(sockClient,rec_str,1024,0))>0)//接收文件,放入rec_str{fwrite(rec_str,sizeof(char),count,fd);}fclose(fd);}//getif(strncmp(rec_str,"put",3)==0){strcpy(filename,rec_str+9);//复制需发送的文件名称,赋给filenamefd2=fopen(filename,"rb");if(fd2)//假如读文件成功{if(!SendFile(sockClient,fd2))//假如发送失败{printf("send failed!");return 0;}fclose(fd2);}else//打开文件失败{strcpy(send_str,"can't open file!\n");if(send(sockClient,send_str,1024,0))return 0;}}//putclosesocket(sockClient);WSACleanup();return Cprocess();}int main(){help();Cprocess();return 0;}5.程序运行结果一.正确功能实现1.运行客户端,输入服务器正确IP地址,连接成功后,输入dir查看服务器所在文件夹中的文件2.用put命令发送文件p.txt,发送完毕,查看服务器所在文件夹,发现p.txt存在二.运行错误测试1.运行客户端,输入错误的IP地址。