文件传输软件_第1页
文件传输软件_第2页
文件传输软件_第3页
文件传输软件_第4页
文件传输软件_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、科信学院通信软件设计项目(二级项目)设计说明书(2014/2015学年第一学期)题 目 : 文件传输软件 专业班级 : 通信工程11级1班 学生姓名 : 刘伟 张畅 学 号: 110312108 110312109 指导教师 : 陈湘国、 张龙、 任丹萍 设计周数 : 1周 设计成绩 : 2015年1月7日目录1课程设计要求与任务21.1课程设计要求21.2课程设计任务22.课程设计正文32.1 课程设计项目分析32.1.1 软件背景32.1.2 软件原理32.1.3 TCP/IP网络体系结构32.1.4套接字(Sockets)52.1.5 传输原理62.1.6 Socket编程72.2 课程

2、设计项目设计72.2.1 总体设计72.2.2 界面设计93课程设计问题分析93.1 通信的模式93.2 传输的可靠性94课程设计总结105参考文献101课程设计要求与任务1.1课程设计要求要求软件能够方便地实现局域网中主机之间的文件传输。为了可靠传送文件,建议使用TCP提供的服务器。可以考虑采用C/S架构,可以采用Pull方式(客户端主动获取文件,服务器端被动地提供文件),也可以采用Push方式(客户端主动发送文件,服务器端被动地接收文件)。也可以采用P2P架构(稍微复杂,但更好用),例如使用UDP方式在对等方之间传递文本消息以及用于发起文件传输的控制信息,实际进行文件传输时仍通过TCP连接

3、进行。基本设计思路是先建立TCP连接,连接成功后,发送文件的一方从文件流读取数据,写入网络流,接收方读取网络流,写入文件流,完成后断开TCP连接,释放相关的资源。1.2课程设计任务1、深入理解TCP的工作原理和服务的特性,掌握TCP套接字编程机制和方法;2、理解C/S架构,理解Pull和Push两种文件传输模式; 3、深入分析文件发送方和接收方的程序运行流程,绘制程序流程图; 4、学习使用OpenFileDialog、SaveFileDialog、FileStream;5、完成服务器端软件和客户端软件的开发和测试;6、按照格式要求撰写设计报告。2.课程设计正文2.1 课程设计项目分析2.1.1

4、 软件背景随着互联网技术的迅猛发展,计算机通信给人类文明带来了翻天覆地的变化。很多情况下,人们的日常工作需要借助文件传输来完成。但大多数文件传输功能都需要借助移动磁盘等硬件设备或Internet上的服务器才能实现。这就给那些具有大规模内部网络的用户造成了许多问题,如浪费资金、浪费网络资源、病毒入侵、降低了工作效率等。为了方便局域网内主机的资源共享,需要开发一个基于局域网的文件传输工具,在内部网络中实现文件交换。则可以大大方便局域网内主机的资源共享。2.1.2 软件原理基于局域网的文件传输系统的设计选用Virtual Studio 2005 为开发工具,基于TCP/IP的协议,用套接字来实现文件

5、的传输。以TCP服务器模式通过建立Socket连接后实现局域网快速,准确,安全的点对点文件以及文件夹传输功能。2.1.3 TCP/IP网络体系结构TCP/IP协议采用层次体系结构,如图2-1所示,从图中可以看出,每一层在逻辑上都与通信端的对应层相连接。图中所示的服务器程序持续监听通信客户端;客户端仅周期性地与服务器相连接以交换数据,其中TCP协议层提供相当于OSI参考模型中传输层的服务,为收、发端应用程序提供通信;IP协议层负责提供统一的数据报;链路层主要功能是收、发IP层的IP数据报;TCP/IP之上是该协议提供的各种服务,而底层网络可以是不同的物理网络,如Ethernet、Token Ri

6、ng、X.25公共分组交换网等。图2-1 TCP/IP协议层模型(LAN)针对于所要求设计的软件最终目的:实现局域网中主机之间的文件传输这一功能,考虑到可靠的传送文件,我们选择使用TCP提供的服务器。对于TCP传输协议及其工作原理,叙述如下:TCP,传输控制协议(Transport Control Protocol),是一种面向连接的、可靠的传输层协议。面向连接指其一次正常的TCP传输需要通过在TCP客户端和TCP服务端建立特定的虚电路连接来完成,该过程通常被称为“三次握手”。可靠性可以通过很多种方法来提供保证,在这里我们关心的是数据序列和确认。TCP通过数据分段(Segment)中的序列号保

7、证所有传输的数据可以在远端按照正常的次序进行重组,而且通过确认保证数据传输的完整性,并提供拥塞控制机制,当网络拥塞时,源抑制其传输速率。要通过TCP传输数据,必须在两端主机之间建立连接。TCP连接建立过程如图2-2所示。图2-2 TCP连接建立过程2.1.4套接字(Sockets)套接字(Sockets)最早是由Berkeley大学提出在UNIX操作系统下实现TCP/IP通信协议的开发接口,随着Internet在全球范围内的广泛使用,Sockets已成为网络编程的通用接口。Microsoft公司以Sockets为基础开发的Winsock建立了Windows环境下网络间的编程接口。套接字是对网络

8、中不同主机上应用进程之间进行双向通信的端点的抽象,一个套接口就是网络上进程通信的一端,提供了应用层进程利用网络协议栈交换数据的机制。套接字可以分为流式套接字(Stream Sockets)、数据报套接字(Datagram Sockets)和原始套接字(Raw Sockets)。流式套接字最常用的套接字,提供面向连接的、无差错的、发送顺序一致的、包长度不限和非重复的网络信息的传输;数据报套接字提供无连接的服务,以独立的数据报进行传输,不保证顺序性、可靠性和无重复性;原始套接字提供对下层网络的通信协议的访问,主要用于开发新的协议或用于提取较隐蔽的功能。在程序设计中我们选择流式套接字搂完成C/S模式

9、的通信,保证数据能够准确、无误的传输。图2-3所示的是流式套接字的基本通信方式。图2-3 面向连接的流方式2.1.5 传输原理应用程序的网络通信是利用相同的通途协议来完成信息的传输。应用程序和Winsock都是工作在Windows的用户模式下,操作系统不仅仅通过Winsock,还需要底层的支持。套接字仿真器(套接字核心驱动程序)和传输驱动程序接口,起到了Winsock和传输协议之间的通信桥梁作用。Winsock是网络通信应用程序于套接字仿真器间的接口,TDI是套接字仿真器和传输协议间的接口套接字核心模式,驱动程序复杂连接和缓冲区管理,以便向应用程序提供套接字仿真(在AFDSYS文件中实现),同

10、时负责与底层传输驱动程序对话传输驱动程序接口(TDI)负责核心模式驱动程序与传输协议间的通信。 当应用程序利用Winsock发送和接收数据时,是由核心模式驱动程序AFDSYS负责管理发送和接收缓冲区来发送和接收数据。当应用程序调用send或WSASend函数来发送数据时,AFDSYS在后台负责把数据复制进他自己的发送缓冲区,然后send或WSASend函数立即返回,AFDSYS在后台把数据发送出去,远程客户端接收数据的情况也类似,由接收方的AFDSYS在后台负责把数据复制到自己的接收缓冲区,然后应用程序调用recv或WSARecv函数来接收数据时,把数据由AFDSYS管理的接收缓冲区复制到应用

11、程序提供的缓冲区中。AFDSYS管理的发送缓冲区SO-SNDBUF和接收缓冲区SO-RECVBUF在缺省时两个缓冲区的大小都为8,192个字节,但可以根据实际要求由应用程序设定,由于我们传输的对象是大数据量文件,因此需要对系统的发送缓冲区和接收缓冲区作相应的设定,以保障大数据量的文件数据的发送的接收。2.1.6 Socket编程Socket编程是建立在应用层TCP/IP协议之上的。目前最流行的是客户机/服务器模式,在面向连接的 Client/Server 模型中,Server 端的 socket 总是等待一个 Client 端的请求。客户机/服务器模型的工作流程图如下图2-4所示:图2-4 客

12、户机/服务器模型的工作流程(1)服务器(接收方)程序特点: 一般启动后就一直处于运行状态,以等待客户机进程的请求; 使用的端口往往是熟知端口,便于客户机进程连接请求; 一般拥有较多的系统资源,以便及时响应各个客户机进程的请求; 可以并行处理多个客户机进程的请求,但数目是有一定的限制; 在通信时一般处于被动的一方,不需要知道客户机的IP地址和端口信息。(2)客户机(发送方)程序的特点: 在需要服务器进程的服务时将向服务器进程请求服务,并建立通信连接,得到满足并完成处理后就终止通信连接; 使用向系统申请的临时端口与服务器进程进行通信,通信完成后将释放该端口; 拥有相对较少的系统资源; 在通信时属于

13、主动的一方,需要事先知道服务器的IP地址和端口信息2.2 课程设计项目设计2.2.1 总体设计本程序的文件传输系统的实现应包含服务端模块、客户端模块、界面显示模块等几个部分,整个程序采用VC+6.0完成,通信部分采用WINSOCK。程序使用流式套接字,基于C/S模型。在设计GUI界面时把客户端和服务端放在一个界面中,根据用户需要将程序设置成客户端和服务端。服务器和客户机的基本流程如图2-5所示。在通信的时候主要可以分为两个部分,一个部分是控制信息的传输部分,而另一个部分就是文件的传输部分。传送的控制信息可以包含发送文件的请求,文件的名称、大小等,由于这方面的数据量比较小,因此采用了MFC所提供

14、的CSocket类的串行化技术来实现。对于文件的传输,由于数据量相对来说比较大,所以用两个线程来实现文件的传输,一个线程用于发送,一个线程用于接收。图2-5是一个成功的文件传输过程的流程。 客户机服务器 创建CClientSocket类的对象创建CServerSocket类的对象将sockets与本地IP和相应的端口绑定Connect(),将套接字与服务器相连是否有连接到服务器?Listen(),监听来自客户端的连接否显示错误信息接收客户端的连接请求不为客户端建立连接,显示错误信息是否有建立连接?ReceiveMsg/()SendMsg(),在套接字上收发信息是否 为客户端建立连接 Recei

15、veMsg/()SendMsg(),在套接字上收发信息图2-5 服务器和客户机的基本流程2.2.2 界面设计此次文件传输软件界面设计如图2-6所示。软件设计大致有三模块组成:首先,两台主机IP模块,再者则是文件传输区,包括文件的选择、接收与发送;最后,作为完善,增加了聊天区域,完善了单纯文件传输功能这一弊端,使软件更实用化。图2-3 文件传输软件设计图3课程设计问题分析3.1 通信的模式由于是实现点对点的文件传输,因此在程序中我们使用的是C/S的模式来实现通信。对于C/S的模式,即分为客户端和服务端。服务端用来接收客户端的连接,实现两端之间互相传输文件。采用C/S的模式可以更好的体现程序的功能

16、设计思想,充分调用在LAN中的server和client两方面的处理能力,极大的减少网络上的信息流通量。C/S体系结构有可能提供一种开放式的、易伸缩扩展的分布式计算机环境,并保护硬件等投资。3.2 传输的可靠性要想实现文件的可靠性传输,可以使用流式套接字。因为流式套接字提供面向连接的、无差错的、发送顺序一致的、包长度不限和非重复的网络信息的传输,能提供更好的可靠性。而对于数据报套接字提供的是无连接的服务,以独立的数据报进行传输,不保证顺序性、可靠性和无重复性,相比之下用流式套接字能提供更好的的可靠性传输。4课程设计总结通过此次的课程设计,我学到了很多,理论知识很重要,因为它决定了设计的方法及程

17、序最终是否成功,所以就需要查找很多资料,有足够的耐心、细心去研究问题,解决问题,同时还必须有实事求是地分析问题的态度,知道理论与实际是有一些差别的。而通过查资料和搜集有关的文献,培养了自学能力和动手能力,由曾经被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。测试的过程中要有平和的心态,遇见问题是很正常的,自己需要做的就是多做比较和分析,逐步的排除可能的原因,要坚信“凡事都是有办法解决的”和“问题出现一定有它的原因”,这样最后一定能调试成功。报告的写作过程中也学到了做任何事情所要有的态度和心态。首先我明白了做学问要一丝不苟,对于出现的任何问题和偏差都不要轻视,要通过正确

18、的途径去解决,在做事情的过程中要有耐心和毅力,不要一遇到困难就打退堂鼓,只要坚持下去就可以找到思路去解决问题的。在工作中要学会与人合作的态度,认真听取别人的意见,这样做起事情来就可以事倍功半。总之,此次课程设计,我收获了很多,更加清楚地知道了TCP的工作原理以及服务特性,掌握了TCP套接字的编程机制和方法。我相信通过这一次的体验与锻炼,对我们今后的学习及对事物的看法有很大帮助,相信今后会做得更好!5参考文献1 邱锦伦,曹旻.Visual C#.NET程序设计教程M.清华大学出版社,2006.92 马骏,郑逢斌,沈夏炯. C#网络应用高级编程M.人民邮电出版社,2006.103 邵丽萍,张后扬,

19、郭春芳.网站编程技术实用教程. 第一版.清华大学出社,2005年1月课程论文评语:成 绩评阅教师签名评阅日期 年 月 日附录:程序源代码public class Userpublic UserSession commandSession get;set;public UserSession dataSession get;set;public TcpListener dataListener get;set;/主动模式下使用的客户端监听IPEndpointpublic IPEndpoint remoteEndpoint get;set;/用户名public string userName ge

20、t;set;/初始工作目录public string workDir get;set;/当前工作目录public string CurrentDir get;set;/初始状态为等待输入用户名public int LoginOK get;set;/是否使用二进制传输方式public bool isBinary get;set;/数据连接使用的是否是被动连接public bool isPassive get;set; (1)在解决方案资源管理器中,用鼠标右击项目名,选择【添加】【类】,添加一个类文件UserSession.cs,用于保存连接设置。代码如下:public class UserSes

21、sionpublic NetworkStream networkStream;public readonly StreamReader sr;public readonly StreamWriter sw;public readonly TcpClient client;public readonly BinaryReader br;public readonly BinaryWriter bw;public UserSession(TcpClient client)this.client = client;networkStream = client.GetStream();sr = new

22、 StreamReader(networkStream,Encoding.Default);sw = new StreamWriter(networkStream,Encoding.Default);sw.AutoFlush = true;br = new BinaryReader(networkStream,Encoding.Default);bw = new BinaryWriter(networkStream,Encoding.Default);public void Close()client.Client.Shutdown(SocketShutdown.Both);client.cl

23、ient.Close();client.Close();(2) 切换到FormMain的代码编辑方式下,添加对应按钮的Click事件以及其他代码,源程序如下:public partial class MainForm : FormTcpListener myTcpListener;Dictionary<string,string>users;/保存用户名和密码public MainForm()InitializeComponent();/为简单起见,此处假设已经有MyTestName用户,密码12345users = new Dictionary<string,string&

24、gt;();users.Add("mytestName","12345");/设置默认目录textBox1.Text = "e:/1s/"/<summary>单击【启动FTP服务】触发事件</summary>private void buttonStart_Click(object sender,EventArgs e)this.listBoxStatus.Items.Add("FTP服务已启动");Thread t = new Thread(ListenClientConnect);t.I

25、sBackground = true;t.Start();buttonStart.Enabled = false;buttonStop.Enabled = true;/<summary>监听端口,处理客户端连接</summary>private void ListenClientConnect()myTcpListener = new TcpListener(IPAddress.Any,21);myTcpListener.Start();while(true)tryTcpClient client = myTcpListener.AcceptTcpClient();Ad

26、dInfo(string.Format("0和本机(1)建立FTP连接", client.Client.RemoteEndpoint,myTcpListener.Loca1Endpoint);User user = new User();mandSession = new UserSession(client);user.workDir = textBox1.Text;Thread t = new Thread(UserProcessing);t.IsBackground=true;t.Start(user);catchbreak/<summary>/处理USER命令,但不进行用户名验证/</summary>/<param name="user">客户端信息</param>/<param name="command">命令</param>/<param name="param">参数</param>p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论