文件传输协议的简单设计与实现
- 格式:doc
- 大小:324.00 KB
- 文档页数:23
文件传输系统的设计与实现
1.系统架构设计
2.传输协议选择
在文件传输系统中,需要选择适合的传输协议来进行文件的传输。
常
见的传输协议有FTP、HTTP、TCP等。
根据系统的需求和性能要求,选择
合适的传输协议进行文件传输。
3.带宽管理和调度
4.断点续传
为了提高文件传输的可靠性和效率,在文件传输系统中通常需要实现
断点续传功能。
即在文件传输过程中,如果传输中断或者失败,可以从中
断的位置继续传输,而不需要重新传输整个文件。
5.安全性设计
6.单点故障与容错设计
7.性能优化
为了提高文件传输系统的性能,可以采用一些性能优化技术。
例如,
使用并行传输技术,对文件进行分块传输,使用压缩算法减少传输数据量
等方式来提升系统的性能。
8.用户界面设计
好的用户界面设计可以提升用户的使用体验。
在文件传输系统中,需
要设计直观、易用的用户界面,提供文件选择、传输进度显示、状态提示、错误处理等功能,以方便用户进行文件传输操作。
最后,为了验证文件传输系统的正确性和可靠性,需要进行系统测试
和性能评估。
可以开展单元测试、集成测试、系统测试等各个层次的测试,以及通过对系统的性能指标进行度量和分析,来评估系统的质量和性能。
总之,文件传输系统的设计与实现需要综合考虑架构设计、传输协议
选择、带宽管理、断点续传、安全性设计、容错设计、性能优化和用户界
面设计等方面的问题,以构建一个高效、可靠、安全的文件传输系统。
基于UDP的文件传输程序设计与实现(服务端)一、程序设计思路1.UDP(User Datagram Protocol,用户数据报协议)简介UDP为无连接的通信协议,其主要目的在于处理传输少量的数据。
与TCP 不同的是,UDP在传输数据之前不需要建立通信链接。
仅须设置计算机间的IP 及使用相同的端口,即可互相传输信息,因此UDP只提供单向的数据传输,如图1.1所示:图1.1 UDP通信协议由于UDP不须先建立连接,这样节省了TCP建立连接所需的时间,因此适合于在主机间做单向的数据传输。
但UDP不提供数据错误的侦测以及数据重送等功能,因此并不确保数据能完整发送。
2.java实现UDP程序思路UDP程序使用数据报的形式出现,需要使用以下两个类。
●数据报的内容:DatagramPacket。
●发送和接收数据报:DatagramSocket。
在开发TCP程序的时候,是先有服务端,之后再进行客户端的开发。
而UDP 要运行的时候,则应该先运行客户端,之后再运行服务端。
在运行UDP程序的时候先运行客户端,阻塞等待服务端发过来的信息,服务端开启后,向目标端发送信息之后便关闭了服务端,并不阻塞等待客户端的响应。
二、实现关键技术点1.服务端界面布局服务端界面使用的是边框布局管理器,边框布局管理器是每个JFrame的内容窗格的默认布局管理器。
流布局管理器完全控制每个组件的放置位置,边框布局管理器则不然,它允许为每个组件选择一个放置位置。
可以选择把组件放在内容窗格的中部、北部、南部、东部或者西部。
一般来讲是先放置边缘组件,剩余的可用空间由中间组件占据。
当容器缩放时,边缘组件的尺寸不会改变,而中部组件的大小会发生变化。
在添加组件时可以指定BorderLayout类中的CENTER、NORTH、SOUTH、EAST和WEST常量。
图2.1给出了服务器的界面布局:图2.1 UDP文件传输系统界面布局2.文件选择器Swing中提供了JFileChooser类,它可以显示一个文件对话框,其外观与本地应用程序中使用的文件的对话框基本一样。
FTP(文件传输协议)的原理与实现FTP,即文件传输协议(File Transfer Protocol),是一种用于在计算机网络中进行文件传输的应用层协议。
它允许用户通过客户端和服务器之间进行文件的上传、下载和删除等操作。
本文将介绍FTP的原理和实现。
一、FTP的原理FTP的原理基于客户端-服务器(client-server)模型。
客户端和服务器通过FTP协议进行通信,客户端发出命令请求,服务器进行相应的处理并返回结果。
FTP采用不同的连接来进行数据传输和命令传输。
1. 命令传输连接命令传输连接是客户端和服务器之间进行命令交互的通道。
客户端通过该连接发送各种FTP命令,如登录、目录操作、文件操作等。
服务器接收到命令后执行对应的操作,并返回结果给客户端。
该连接使用TCP协议的默认端口号21。
2. 数据传输连接数据传输连接用于在客户端和服务器之间传输文件内容。
FTP支持两种方式的数据传输:主动模式(Active Mode)和被动模式(Passive Mode)。
- 主动模式:客户端向服务器发起数据传输连接,在该连接上进行文件的传输。
客户端随机选择一个端口并通过PORT命令告知服务器。
服务器返回连接确认请求,然后在该连接上进行数据的传输。
主动模式需要客户端开放一个端口用于接收服务器的连接。
- 被动模式:服务器向客户端发起数据传输连接,在该连接上进行文件的传输。
客户端发送PASV命令给服务器,服务器在随机开放的端口上等待客户端的连接。
客户端接收到服务器的地址和端口信息后,通过该地址和端口和服务器进行数据传输。
被动模式通过服务器来建立数据传输连接,适用于客户端无法开放端口的情况(如在防火墙后)。
通过命令传输连接和数据传输连接的组合,客户端和服务器可以实现文件的上传、下载和删除等功能。
二、FTP的实现FTP的实现涉及到客户端和服务器端的开发。
下面分别介绍两者的实现要点。
1. 客户端实现客户端实现主要包括以下几个方面的工作:- 用户界面设计:客户端需要提供一个用户界面供用户输入FTP服务器地址、用户名和密码等信息,并显示服务器返回的文件列表及操作结果等信息。
一、实验目的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协议不支持断点续传。
基于分布式存储技术的文件传输协议设计与实现随着互联网的发展,人们对数据传输的需求也随之增加。
目前,网络上常用的数据传输方式有HTTP、FTP等传输协议。
然而,这些协议均有相应的局限性,比如传输速度慢、安全性不高等问题。
因此,近年来,分布式存储技术逐渐被应用于数据传输中,使得文件传输协议得以更好地满足人们的需求。
本文将介绍基于分布式存储技术的文件传输协议设计与实现。
一、分布式存储技术的基本原理分布式存储技术是将数据分散存储在多台计算机上,每台计算机上存储一部分数据,形成一个大型存储系统。
通过这种方式,可以提高数据的存储可靠性、提高数据访问速度和传输速度。
在分布式存储系统中,通常会采用数据分片的方式进行存储。
就是将数据分成若干个固定大小的块,然后将这些块存储在不同的节点上。
在进行数据传输时,可以选择任意一个节点进行访问,最终实现数据传输。
二、分布式存储技术在文件传输中的优势传统的文件传输协议通常都是采用客户端和服务端的模式进行传输,这种方式有一些缺陷。
比如:如果服务端网络出现故障,那么客户端就不能进行文件传输;同时,大文件的传输往往需要占用大量服务端的网络带宽,导致传输速度缓慢。
这些缺陷都可以通过采用分布式存储技术进行文件传输来解决。
具体来说,采用分布式存储技术进行文件传输具有如下优势:1.可靠性更高。
由于数据分散存储在多个节点上,当局部网络故障时,其他节点依然可以进行传输。
因此,分布式存储技术相对于传统的文件传输而言,具有更高的存储可靠性。
2.传输速度更快。
由于数据分散存储在多个节点上,文件的传输可以同时进行,加快了传输速度。
3.网络带宽使用更合理。
传统的文件传输协议往往需要占用大量服务端的网络带宽,影响其他用户的使用。
而采用分布式存储技术进行文件传输则可以将文件分散存储在不同节点上,避免了带宽的瓶颈。
三、基于分布式存储技术的文件传输协议设计基于分布式存储技术的文件传输协议主要包括以下几个方面:1.节点检索。
TCP协议实现文件传输使用TCP协议实现传输文件程序分为发送端和接收端。
首先在传输文件数据之前,发送端会把将装有文件名称和文件长度等信息的数据包发送至接收端。
接收端收到文件名称和文件长度信息后会创建好空白文件。
接着开始传输文件数据。
下面介绍实现功能的主要过程:1.创建套接字、绑定、监听、连接、接受连接//创建TCP协议的套接字m_Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(SOCKET_ERROR == m_Socket)AfxMessageBox("Create Socket Error! ", 0, 0);//绑定与监听SOCKADDR_IN addrSrv;addrSrv.sin_addr.s_addr = inet_addr(sIP);addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(Port);int ret = bind(m_Socket, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR) );if(ret==SOCKET_ERROR)AfxMessageBox("Bind Socket Error!", 0, 0);//连接SOCKADDR_IN ServerAddr;ServerAddr.sin_addr.s_addr = inet_addr(ServerAddr_in);ServerAddr.sin_family = AF_INET;ServerAddr.sin_port = htons(ServerPort);int Result = connect(m_Socket, (struct sockaddr*)&ServerAddr, sizeof(struct s ockaddr));if(SOCKET_ERROR == Result)AfxMessageBox("Connet Failed!");//接受连接SOCKADDR_IN ClientAddr;int len =sizeof(SOCKADDR_IN);SOCKET ClientSock = accept(m_Socket, (struct sockaddr*)&ClientAddr, &len);if(SOCKET_ERROR == ClientSock)AfxMessageBox("Accept Failed!");2.声明宏和结构体声明套接字缓冲区和一次发送文件数据的缓冲区大小#define SOCKET_BUFF 80000 //套接字缓冲区大小#define PACK_BUFF 50000 //数据包缓冲区大小声明文件I/O缓冲区和最大文件路径长度#define FILE_NAME_MAX 100 //文件路径最大长度#define FILE_IO_BUFF PACK_BUFF //文件IO缓冲区//文件信息typedef struct _FileInfor{u_long ulFileLen;char sFileName[ FILE_NAME_MAX ];}_FileInfor;//数据包typedef struct _DataPack{char cType; //'D'为数据 'M'为文件信息int nPackLen;char sContent[ PACK_BUFF ]; //数据包缓冲区u_long nPosition; //数据在文件中的位置int nContentLen; //数据字节数_FileInfor FileInfor; //文件信息}_DataPack;3.发送端//发送线程需要的全局变量char sPath[FILE_NAME_MAX]; //文件地址u_long FileByteCount; //文件大小SOCKET ClientSocket; //(1)设置套接字发送缓冲区大小,在32位Windows XP环境下,系统为每个套接字分配的默认发送数据缓冲区为8192字节。
网络多媒体传输的协议设计与实现一、引言随着互联网的迅速发展,网络多媒体传输已经成为日常生活中无法或缺的一部分。
音乐、电影、游戏和视频等多媒体内容在互联网上传输的速度和质量对用户体验有着十分重要的影响,因此网络多媒体传输的协议设计和实现成为了研究的热点和挑战。
本文将从协议设计和实现两个方面,探讨网络多媒体传输的相关技术和方法。
二、协议设计网络多媒体传输的协议设计是网络工程师需要深入研究的内容之一。
网络协议是网络中最重要的组成部分,用于规范网络传输数据的格式、传输速度和执行过程。
1.传输控制协议(TCP)TCP是互联网中最常用的传输协议之一。
在网络多媒体传输过程中,TCP协议可以保证数据的可靠性和顺序性,但也因为TCP 协议需要进行三次握手,所以在多媒体数据实时传输时容易出现延迟和抖动的问题。
2.用户数据报协议(UDP)UDP是一种无连接的传输协议,相比TCP来说更适合视频和音频等实时多媒体数据的传输,因为UDP协议具有轻量、低延迟和无拥塞控制等优点。
但同时也有丢包和乱序等不可靠传输问题。
3.数据报协议组播(DVMRP)DVMRP是用于多播传输数据的协议之一,可以实现数据的实时传输和承载能力的提高。
DVMRP协议可以将数据广播到多个接收器,从而降低了单个接收器的网络负载,同时也有助于提高网络的传输效率和可靠性。
4.实时传输协议(RTP)RTP是一种专门针对音频或视频等实时多媒体数据传输的协议。
RTP协议可以实现实时传输和同步,并且还可以对传输的流添加定位信息,以便接收方更好地处理数据。
5.实时协议控制协议(RTCP)RTCP是RTP的控制协议,用于传输关于RTP流的统计信息和控制信令。
通过RTCP协议,接收端可以告诉发送端有关接收数据的反馈信息,从而使发送端可以对传输的数据进行调整。
三、协议实现协议设计是将理论知识转化为软件接口和协议规范的过程,而协议实现则是将协议设计应用到具体的网络环境中。
1.编程语言在协议实现过程中,选择合适的编程语言对于开发人员至关重要。
第ChpNum章文件传输协议的C语言实现1设计目的本设计旨在利用Winsock 简单实现FTP(File Transfer Protocol,文件传输协议)的客户端和服务器端程序。
通过完成此设计,了解Winsock API函数调用方法和一般网络应用程序的编程方法,理解FTP协议,掌握C语言设计FTP协议软件的基本技术,为将来开发其他通信协议软件打下坚实基础。
2 设计准备(1)连入同一局域网的PC,每人一台。
(2)PC装有Windows操作系统、Visual C++ 编译器及开发手册MSDN 。
3关键技术文件传输协议介绍FTP 是File Transfer Protocol(文件传输协议)的英文简称,用于Internet上的控制文件的双向传输。
在实现的层面上,FTP又可理解为一个可用于文件传输的客户机/服务器系统,该系统包括客户机端程序和服务器端程序,客户端和服务器端通信规则为FTP协议。
用户通过客户机程序向服务器程序发出命令请求,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。
比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。
客户机程序接收到这个文件,将其存放在用户目录中。
在通信协议的分层模型中,文件传输协议是在TCP(Transmission control Protocol,传输控制协议)之上的一个应用层协议,应用程序之间的通信需要用到传输层提供的字节流透明无误传输服务。
Windows操作系统具有TCP/IP协议栈,应用程序可通过Winsock API函数的调用实现端到端透明数据链接的建立。
Winsock API介绍因特网(Internet)最初是基于Unix的,而Sockets(套接字)是Unix第一个支持TCP/IP 协议栈的网络API,最早于1982年8月随BSD版Unix推出,常被称为Berkeley sockets (伯克利套接字)。
实验一:文件传输协议的设计与实现目录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端的通信关闭Socket,结束与当前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。
课程设计课程名称_计算机网络题目名称_文件传输协议的简单设计与实现学生学院_自动化学院专业班级_13级物联网工程1班学号_**********学生姓名梁建斌指导教师刘洪涛2015年12月25日摘要文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问。
本设计是基于Eclipse平台下使用Java实现的FTP文件传输。
实现基本的文件传输操作。
建立客户端和服务器、客户端基于TCP Socket进行数据传输,采用多线程进行数据传输,套接字来实现。
在实现过程中采用类与对象的思想进行规划,体验了一个软件开发过程的具体实现步骤。
关键字:Java网络编程FTP文件传输文件上传下载文件操作1目录一、实验目的 (3)二、实验内容和要求 (3)1、实验内容 (3)2、具体要求 (3)三、实验主要仪器设备和材料 (3)四、基本原理 (3)1.FTP系统模型 (3)2. 系统功能设计 (4)2.1总体设计 (4)基本功能 (4)2.2系统实现 (4)五、实现结构流程图 (5)六、整体实现的逻辑、数据结构 (5)1.客户端的抽象数据类型 (5)1.1FTPClient用户界面 (5)1.2FTPClient控制连接线程 (7)1.3FTPClient数据连接线程 (7)2. 服务器的抽象数据类型 (8)2.1 FTPServer的控制连接线程 (8)2.2FTPServer的数据连接线程 (9)七、具体的一些方法实现 (9)1. FTPClient用户界面 (10)2. FTPClient控制连接 (10)3. FTPClient数据传输 (12)4. FTPServer控制连接 (14)5. FTPServer数据传输 (14)八、测试结果客户端结果 (16)服务端结果 (16)九、课程设计心得 (17)十、参考文献 (18)2一、实验目的文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。
课程设计课程名称计算机网络课程设计题目名称文件传输协议的简单设计与实现学生学院专业班级____学号学生姓名_______________指导教师___________2010年1月5日设计摘要关键词:SOCKET编程,FTPclient/server程序摘要:本课程设计包含了文件传输协议的简单设计与实现。
文件传送是各种计算机网络实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。
文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP 网络体系结构之上,使用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),实现下述命令功能:get , put, pwd, dir, cd, ?, quit 等,利用了已有网络环境设计并实现简单应用层协议。
本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。
目录1、文件传输协议的简单设计与实现------------------------------18 1. 1 具体设计任务----------------------------------------------18 1.2 基本思路及所涉及的相关理论--------------------------------181.2.1基本思路-------------------------------------------------182.2.2 相关理论--------------------------------------------18 1.3设计流程图------------------------------------------------191.4实验运行情况----------------------------------------------191.5 核心程序--------------------------------------------------222.5.1 服务器(sever)程序---------------------------------222.5.2 客户(client)程序----------------------------------291.6心得体会-----------------------------------------------------------------------------37 参考文献--------------------------------------------------------382、文件传输协议的简单设计与实现2. 1 具体设计任务计算机网络实验环境建立在TCP/IP 网络体系结构之上。
各计算机除了安装TCP/IP 软件外,还安装了TCP/IP 开发系统。
实验室各计算机具备Windows环境中套接字socket 的编程接口功能,可为用户提供全网范围的进程通信功能。
本实验要求利用这些功能,设计和实现一个简单的文件传送协议。
用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述命令功能:get:取远方的一个文件put:传给远方一个文件pwd:显示远主当前目录dir:列出远方当前目录cd :改变远方当前目录?:显示你提供的命令quit :退出返回2.2基本思路及所涉及的相关理论2.2.1基本思路设计程序使客户端连接的时候,服务器将会向客户端发回一条消息告知它的IP地址,然后关闭连接并继续接收端口的连接。
建立各个命令功能对应的函数,发送请求,等待服务器端的服务。
服务器端初始化WinSock,创建SOCKET,获取主机信息,并对客户端进行会话,发送回复讯息给客户端,响应完毕后关闭连接,释放WinSock。
2.2.2 相关理论文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。
计算机网络实验环境建立在TCP/IP 网络体系结构之上。
各计算机除了安装TCP/IP 软件外,还安装了TCP/IP 开发系统。
实验室各计算机具备Windows 环境中套接字socket 的编程接口功能,可为用户提供全网范围的进程通信功能。
本设计利用这些功能,设计和实现一个简单的文件传送协议。
用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c)。
2.3 设计流程图2.4实验运行情况服务器端运行,默认自动启动监听,情况如下图:服务如果关闭监听,效果如下图:客服端运行,如下图:输入服务器端的IP和端口号进行连接,效果如图:下面设置文件保存位置,如图:下面演示上传一个视频文件,然后再下载下来,其中上传过程的进度信息:上传完成后的效果图:下载文件的进度提示信息:下载完成后,指定目录下就有了该文件了:2.5 核心程序2.5.1 服务器(server)程序如下using System。
using System.Collections.Generic。
using System.Linq。
using System.Text。
using System.Threading。
using 。
using .Sockets。
using System.IO。
using System.Windows.Forms。
namespace TCP文件传输_服务器{class WorkThread{byte[] buffer。
int bufferSize= 4096。
Thread mythread。
Socket handler。
public WorkThread(Socket workSocket){handler = workSocket。
buffer = newbyte[bufferSize]。
mythread = new Thread(BeginCommunication)。
}publicvoid Start(){mythread.Start()。
}publicvoid Abort(){mythread.Abort()。
}privatevoid BeginCommunication(){while (true)//从客户端接收数据,直到连接断开{try{int reCount = handler.Receive(buffer)。
string insStr =Encoding.BigEndianUnicode.GetString(buffer, 0, reCount)。
if (insStr.Substring(0, 4) == "name")//收到下文件请求{string fileName = insStr.Substring(5, insStr.Length - 5)。
SendFile(fileName, handler)。
}elseif (insStr.Substring(0, 4) == "boot")//收到获取根目录请求{string listStr = GetFileNames("F:", false)。
SendString(handler, listStr)。
}elseif (insStr.Substring(0, 4) == "path")//收到获取指定目录内容请求{string path = insStr.Substring(5, insStr.Length - 5)。
string listStr = GetFileNames(path, false)。
SendString(handler, listStr)。
}elseif (insStr.Substring(0, 4) == "Queu")//获取下载文件夹请求,回复完整文件名列表{string path = insStr.Substring(5, insStr.Length - 5)。
string listStr = GetFileNames(path, true)。
SendString(handler, listStr)。
}elseif (insStr.Substring(0, 4) == "upld")//收到上传文件请求{string reFileName = insStr.Substring(5, insStr.Length - 5)。
LoadFile(reFileName, handler)。
}elseif (insStr.Substring(0, 4) == "quit")//收到断开连接命令{HostQuit()。
break。
}}catch { HostQuit()。
break。
}}}privatevoid LoadFile(string reFileName, Socket handler){try{FileStream fs = new FileStream(reFileName, FileMode.Create,FileAccess.Write)。
handler.Receive(buffer, 8, SocketFlags.None)。
//接收文件大小long filesize = BitConverter.ToInt64(buffer, 0)。
long receiveCount = 0。
while (receiveCount < filesize)//接收文件{int readcount = handler.Receive(buffer, bufferSize, SocketFlags.None)。
fs.Write(buffer, 0, readcount)。
receiveCount += readcount。
}fs.Close()。
}catch{HostQuit()。
}}privatevoid SendFile(string fileNmae, Socket handler){try{FileStream fs= new FileStream(fileNmae, FileMode.Open, FileAccess.Read)。
long size = fs.Length。
byte[] bysize = BitConverter.GetBytes(size)。