您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 本部一班二组终极报告
信息与电气工程学院通信软件设计二级项目设计说明书(2013—2014学年第二学期)课程名称:通信软件设计二级项目题目:文件传输软件专业班级:通信工程1101学生姓名:刘亚茹王亚男秦绍建施东学号:110310106110310107110310108110310109指导教师:陈湘国张龙任丹萍设计周数:1周设计成绩:2014年07月04日-1-目录1课程设计目的.........................................................22课程设计正文.........................................................22.1设计方案............................................................32.2理论分析............................................................32.2.1TCP协议...........................................................32.2.2Socket编程........................................................32.3流程图...............................................................32.4软件界面设计........................................................43源程序代码............................................................54软件测试.............................................................175设计总结或结论.......................................................186参考文献.............................................................18-2-1课程设计目的本次课程设计,要求我们设计一款文件传输的软件,能够方便地实现局域网中主机之间的文件传输。项目设计为客户机/服务器即当主机主动发起连接或者主动传输文件时,该主机为客户机,当处于监听状态,被连接时或者被动接收文件时,该主机为服务器。执行一个线程的时候,同步调用必须等待这段代码执行完返回结果后,调用方才能继续往下执行,并且同步调用又叫阻塞调用,他阻塞当前线程,然后执行调用,当调用完毕后在继续向下进行。异步调用,调用方和被调方可以属于两个不同的线程,调用方启动被调方线程后,不等对方返回结果就继续执行后续代码,可以执行多个线程,并且可以避免阻塞,所以将在本程序中采用异步调用的方式启动线程。通过这次课设,我们要分析并回答以下问题。(1)深入理解TCP的工作原理和服务的特性,掌握TCP套接字编程机制和方法;(2)理解C/S架构,理解Pull和Push两种文件传输模式;(3)深入分析文件发送方和接收方的程序运行流程,绘制程序流程图;(4)学习使用OpenFileDialog、SaveFileDialog、FileStream;(5)完成服务器端软件和客户端软件的开发和测试;2课程设计正文文件传输是各种计算机网络实现的基本功能,文件传送协议是一种最基本的应用层协议。它是按照客户/服务器的模式进行工作,提供交式的访问。是INTERNET使用最广泛的协议之一。以及深入了解计算机网络是建立在TCP/IP网络体系结构之上。本课程设计目的是要学会利用已有网络环境设计并实现简单应用层协议,掌握TCP/IP网络应用程序基本设计方法各实现技巧。并要求使用这些功能实现一个简单的文件传送协议。2.1设计方案设计程序使客户端连接的时候,服务器将会向客户端发回一条消息告知它的IP地址,然后关闭连接并继续接收端口的连接。当然服务器端先进行监听,发送端发送连接请求,等待接收端的服务。接收端接受该请求(或是拒绝),创建socket,然后进行发送端与接收端的文件传输,当然也可以进行聊天的功能。文件传输过程中,发送放与接收方都可以对其进行控制,可随时中断,当文件传输完毕时,线程自动停止。-3-我们为了可靠传送文件,我们使用了TCP协议,用了C/S架构和P2P架构混合模式。开始侦听建立连接的时候采用的是C/S架构,后来进行文件传输和文本发送时,应用的是P2P架构。在C/S架构中,我们采用Pull方式(客户端主动获取文件,服务器端被动地提供文件)。在P2P架构中,在使用TCP方式在对等方之间传递文本消息以及用于发起文件传输的控制信息,实际进行文件传输时仍通过TCP连接进行。使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含创建Socket;打开连接到Socket的输入/出流、按照一定的协议对Socket进行读/写操作、关闭Socket四个基本的步骤。基本设计思路是先建立TCP连接,连接成功后,发送文件的一方从文件流读取数据,写入网络流,接收方读取网络流,写入文件流,完成后断开TCP连接,释放相关的资源。2.2理论分析2.2.1TCP协议TCP,传输控制协议(TransportControlProtocol),是一种面向连接的、可靠的传输层协议。面向连接指其一次正常的TCP传输需要通过在TCP客户端和TCP服务端建立特定的虚电路连接来完成,该过程通常被称为“三次握手”。可靠性可以通过很多种方法来提供保证,在这里我们关心的是数据序列和确认。TCP通过数据分段(Segment)中的序列号保证所有传输的数据可以在远端按照正常的次序进行重组,而且通过确认保证数据传输的完整性,并提供拥塞控制机制,当网络拥塞时,源抑制其传输速率。要通过TCP传输数据,必须在两端主机之间建立连接。2.2.2Socket编程Socket编程是建立在应用层TCP协议之上的。目前最流行的是客户机/服务器模式,在面向连接的Client/Server模型中,Server端的socket总是等待一个Client端的请求。本次课程设计采用了C/S架构和P2P架构混合模式,开始侦听建立连接的时候采用的是客户机/服务器模型,其工作流程图如图1。-4-2.3流程图设计程序使客户端连接的时候,服务器将会向客户端发回一条消息告知它的IP地址,然后关闭连接并继续接收端口的连接。当然服务器端先进行监听,发送端发送连接请求,等待接收端的服务。接收端接受该请求(或是拒绝),创建socket,然后进行发送端与接收端的文件传输,当然也可以进行聊天的功能。文件传输过程中,发送放与接收方都可以对其进行控制,可随时中断,当文件传输完毕时,线程自动停止。其发送方与接收方的流程如图2。2.4软件界面设计本程序的文件传输系统的实现应包含服务端模块、客户端模块、界面显示模块等几个部分,整个程序采用C#完成。程序使用流式套接字,基于C/S模型。在设计GUI服务器启动监听客户程序请求服务器响应请求通信连接建立数据通信通信连接关闭图1C/S架构工作流程图取消取消yesyesyesnonono传输中断发送文件连接拒绝无法连接传输成功开始传输接收建立连接接受监听文件接收方文件发送方图2文件传输流程图-5-界面时把客户端和服务端放在一个界面中,根据用户需要将程序设置成客户端和服务端。在通信的时候主要可以分为两个部分,一个部分是控制信息的传输部分,而另一个部分就是文件的传输部分。传送的控制信息可以包含发送文件的请求,文件的名称、大小等。对于文件的传输,由于数据量相对来说比较大,所以用两个线程来实现文件的传输,一个线程用于发送,一个线程用于接收。此次文件传输软件界面设计如图2-5所示。软件设计大致有三模块组成:首先,两台主机IP模块,再者则是文件传输区,包括文件的选择、接收与发送;最后,作为完善,增加了聊天区域,完善了单纯文件传输功能这一弊端,使软件更实用化。而客户端图形界面(GUI)设计的中心问题是用户控制式。现代面向对象程序是事件驱动的,对象响应事件(消息)。友好的界面设计包括以下六点方针,包括用户控制式、一致性、个性化和客户化、宽容、反馈。由于客户端程序与服务器程序很类似,所以客户机与服务器端基本一致,先发起连接的,则为客户机,而且文件的互传也很方便,只要安装了此软件,你既可以把本地主机当做客户机向远地主机发送文件,又可以把本地主机当做服务器接受从远地主机发来的文件。此界面中用到的控件分别有:label(对方IP、文件正在传输);Button(连接、断开连接、监听、选择文件、发送、接收、清空、发送等);textbox(输入对方IP的位置、显示状态的位置、聊天对话框)。3程序源代码publicForm1(){InitializeComponent();try{stringstr=Dns.GetHostName();ip=Dns.GetHostAddresses(str);localendpoint=newIPEndPoint(ip[0],2000);//用来传输文本的本地网络端点filelocalendpoint=newIPEndPoint(ip[0],4000);//传输文件的本地网络端点//实例化2个异步调用callback=newAsyncCallback(startreceivesocket);filecallback=newAsyncCallback(startfilereceivesocket);/-6-//实例化文本和文件监听tcplistener=newTcpListener(localendpoint);filetcplistener=newTcpListener(filelocalendpoint);this.lsb_Information.Items.Add(请选择监听或主动连接!\r\n请确保对方处于监听状态才可发出连接申请!\r\n否则需要重启这个这个程序!\n);}catch(Exceptionex){MessageBox.Show(ex.Message);}}(1)启动线程,并在后台运行,在连接的时候打开privatevoidopenth0(){th[0]=newThread(newThreadStart(th0process));th[0].IsBackground=true;if(th[0].IsAlive==false)th[0].Start();}privatevoidopenth1(){th[1]=newThread(newThreadStart(th1process));th[1].IsBackground=true;if(th[1].IsAlive==false)th[1].Start();}(2)听方,等待被连接那一方的监听程序privatevoidth0process(){while(true)-7-{try{if(receivesocket!=null){receivesocket.Blocking=true;length=receivesocket.Receive(bytesreceived,bytesreceived.Length,0);receivestring=System.Text.Encoding.GetEncoding(GB2312).GetString(bytesrecei
本文标题:本部一班二组终极报告
链接地址:https://www.777doc.com/doc-2324140 .html