(完整)实验一-文件传输协议设计要点

合集下载

文本传输协议

文本传输协议

文本传输协议文本传输协议(Text Transfer Protocol,TTP)是计算机网络中用来传输文本数据的一种协议。

它是建立在传输控制协议(Transmission Control Protocol,TCP)之上的应用层协议,用于在客户端和服务器之间进行高效的文本数据传输。

文本传输协议的设计目的是为了确保文本数据在传输过程中的可靠性和完整性。

它使用了TCP的可靠性机制,通过建立连接、确认数据包的发送与接收,以及校验和等技术手段,来保证文本数据能够准确无误地传输到目的地。

文本传输协议采用了基于请求和响应的方式来进行通信。

客户端向服务器发送一个请求,请求的内容包括所要获取的文本数据的详细信息,如文件名、位置等。

服务器接收到请求后,根据请求的内容找到相应的文本数据,并将其发送给客户端。

客户端收到服务器发送的文本数据后,进行处理或显示,完成客户端与服务器之间的文本数据传输。

文本传输协议具有以下特点:1. 可靠性:通过使用TCP的可靠性机制,确保文本数据能够准确无误地传输到目的地,降低数据丢失和错误的概率。

2. 高效性:文本传输协议使用基于请求和响应的通信方式,能够在客户端和服务器之间进行高效的通信,提高数据传输的速度。

3. 灵活性:文本传输协议不限制文本数据的格式和大小,可以传输各种类型的文本数据,如普通文本、富文本、代码等。

4. 安全性:文本传输协议可以结合其他安全机制,如加密技术、认证机制等,来保护传输的文本数据的安全性。

文本传输协议在互联网中得到了广泛的应用。

它被用于电子邮件系统、即时通讯工具、文件传输工具等各种应用场景中,为用户提供了高效、可靠的文本数据传输服务。

总之,文本传输协议是建立在TCP之上的一种用于传输文本数据的协议。

通过使用TCP的可靠性机制,文本传输协议能够确保文本数据能够准确无误地传输到目的地,同时保证高效性、灵活性和安全性。

在互联网中的各种应用场景中,文本传输协议发挥着重要的作用,为用户提供了高质量的文本数据传输服务。

文件传输解决方案

文件传输解决方案
3.网络优化
-自动路由选择:根据实时网络状况,动态选择最优传输路径。
-网络拥塞控制:通过自适应算法调整传输速率,避免网络拥塞。
4.传输管理
-任务管理:用户可对传输任务进行创建、暂停、取消等操作。
-进度追踪:实时显示传输进度,便于用户监控传输状态。
-错误处理:自动检测并处理传输过程中的错误,提高传输成功率。
6.系统维护:定期对系统进行升级和优化,确保系统长期稳定运行。
五、合规性评估
1.法律法规:遵循我国相关法律法规,确保方案合法合规。
2.数据安全:采用加密技术,保障数据传输过程的安全性,防止数据泄露。
3.用户隐私:保护用户隐私,不收集无关个人信息,确保用户信息安全。
六、总结
本文件传输解决方案旨在满足企业和个人对高速、安全、稳定文件传输的需求。通过采用加密传输、多线程传输、负载均衡等技术,提高传输效率,保障传输安全。同时,注重用户体验和合规性评估,确保方案的合法合规性和实际可行性。
4.易用性:用户界面友好,操作简便,降低用户的学习成本。
三、方案设计
1.传输协议
-采用HTTPS协议,确保数据传输的安全性和完整性。
-支持断点续传功能,提高传输效率和用户体验。
2.加密机制
-文件加密:使用AES-256位加密算法对文件内容进行加密。
-密钥管理:采用ECC非对称加密技术保护密钥,确保密钥在传输过程中的安全。
文件传输解决方案
第1篇
文件传输解决方案
一、背景
随着信息技术的飞速发展,企业和个人对文件传输的需求日益增长。为满足高速、安全、稳定的文件传输需求,本方案将针对现有问题,提出一套合法合规的文件传输解决方案。
二、目标
1.提高文件传输速度,降低传输延迟。

文件传送协议实验报告

文件传送协议实验报告

一、实验目的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实验报告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 服务器的响应时间会增加,甚至出现连接超时的情况。

文件传输协议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 发送方应进行文件上传到指定的传输平台,并填写相关信息,如文件名、版本号等。

(完整word版)基于TCP的文件传输实验报告.docx

(完整word版)基于TCP的文件传输实验报告.docx

综合课程设计报告基于 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 ,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信,进行文件传输了。

同时为了便于传输文件过程中的中断现象,在实验时应该充分考虑断点续传问题,即中断文件传输后已经传输的文件不丢失,等到再传时,能继续接着传送。

第9章 文件传输协议实验

第9章 文件传输协议实验

被动模式

在被动模式下,FTP客户端开启端口N+1。然后向服务器 发送PASV命令,通知服务器自己处于被动模式。服务器 收到命令后,会开放一个大于1024的端口P进行监听,然 后在对PASV命令的应答中通知客户端,自己的数据端口 是P。客户端收到命令后,会通过N+1号端口连接服务器 的端口P,然后在两个端口之间进行数据传输。
FTP应答码



110: 重新启动标记应答。 120: 在n分钟内准备好 125: 连接打开准备传送 150: 打开数据连接 200: 命令成功 202: 命令失败 211: 系统状态 212: 目录状态 213: 文件状态 214: 帮助信息 215: 名字系统类型 220: 新用户服务准备好了 221: 服务关闭控制连接,可以退出登 录 225: 数据连接打开,无传输正在进行 226: 关闭数据连接,请求的文件操作 成功 227: 进入被动模式 230: 用户登录 250: 请求的文件操作完成 257: 创建"PATHNAME" 331: 用户名正确,需要口令
第9章
文件传输协议实验
实验目的与实验环境

实验目的

掌握FTP的工作原理 熟悉FTP的常用命令与状态码 运行Windows XP/ Windows Server 2003/Windows 7 操作系统的PC两台 Wireshark网络数据包分析器

实验环境



ServU文件传输服务器软件
FTP(文件传输协议)协议
FTP命令
命令 USER username PASS password CWD pathname QUIT 命令描述 用户--标识文件系统的访问用户,通常是底层连接建立(TCP成 功握手结束)之后发送的第一个命令 密码--发送用户密码(默认情况下信息不加密传送) 改变当前工作目录 退出--终止命令连接
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一:文件传输协议的设计与实现目录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地址。

相关文档
最新文档