文件传输软件设计说明书
信息与电气工程学院
(2013—2014学年第二学期)
课程名称:通信软件设计二级项目
文件传输软件题目 :专业班级:通信工程1101学生姓名:刘亚茹王亚男秦绍建施东学号: 110310106 110310107
110310108 110310109指导教师:陈湘国张龙任丹萍设计周数: 1周设计成绩:
2014年07月04日
目录
1课程设计目
的. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 2课程设
计正文. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 2. 1
设计方案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
2.2理论分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 2.2. 1 TCP协
议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2.2.2
Socket编程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
2.3流程
图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2.4
软件界面设计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
3源程序代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 4软件测
试. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 5设
计总结或结论. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
6参考文献. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
- 1 -
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然后进行发送端与接收端的文件传输 当然也可以进行聊天的功能。文件传输过程中发送放与接收方都可以对其进行控制可随时中断 当文件传输完毕时线程自动停止。
- 2 -
我们为了可靠传送文件我们使用了TCP协议用了C/S架构和P2P架构混合模式。开始侦听建立连接的时候采用的是C/S架构后来进行文件传输和文本发送时应用的是P2P架构。在C/S架构中我们采用Pull方式(客户端主动获取文件服务器端被动地提供文件) 。在P2P架构中在使用TCP方式在对等方之间传递文本消息以及用于发起文件传输的控制信息实际进行文件传输时仍通过TCP连接进行。使用
Server端Listen(监Socket进行Client/Server程序设计的一般连接过程是这样的:
听)某个端口是否有连接请求 Client端向Server端发出Connect(连接)请求 Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。
Server端和Client端都可以通过Send Write等方法与对方通信。对于一个功能齐全的Socket都要包含以下基本结构其工作过程包含创建Socket;打开连接到Socket的输入/出流、按照一定的协议对Socket进行读/写操作、关闭Socket四个基本的步骤。
基本设计思路是先建立TCP连接连接成功后发送文件的一方从文件流读取数据写入网络流接收方读取网络流写入文件流完成后断开TCP连接释放相关的资源。
2.2理论分析
2.2. 1 TCP协议
TCP传输控制协议(Transport Control Protocol) 是一种面向连接的、可靠的传输层协议。
面向连接指其一次正常的TCP传输需要通过在TCP客户端和TCP服务端建立特定的虚电路连接来完成该过程通常被称为“三次握手” 。
可靠性可以通过很多种方法来提供保证在这里我们关心的是数据序列和确认。 TCP通过数据分段(Segment)中的序列号保证所有传输的数据可以在远端按照正常的次序进行重组而且通过确认保证数据传输的完整性并提供拥塞控制机制 当网络拥塞时源抑制其传输速率。要通过TCP传输数据必须在两端主机之间建立连接。 2.2.2 Socket编程
Socket编程是建立在应用层TCP协议之上的。 目前最流行的是客户机/服务器模式在面向连接的Client/Server模型中 Server端的socket总是等待一个Client端的请求。本次课程设计采用了C/S架构和P2P架构混合模式开始侦听建立连接的时候采用的是客户机/服务器模型其工作流程图如图1。
- 3 -
数据通信服务器启客户程服务器响通信连通信连动监听序请求应请求接建立接关闭
图1 C/S架构工作流程图
2.3流程图
设计程序使客户端连接的时候服务器将会向客户端发回一条消息告知它的IP 地址然后关闭连接并继续接收端口的连接。当然服务器端先进行监听发送端发送连接请求等待接收端的服务。接收端接受该请求(或是拒绝) 创建socket然后进行发送端与接收端的文件传输 当然也可以进行聊天的功能。文件传输过程中发送放与接收方都可以对其进行控制可随时中断 当文件传输完毕时线程自动停止。其
。 发送方与接收方的流程如图2
文件发送方文件接收
方no监听
连接yes no
接受yes
建立连接无法连接
发送文件接收no yes取消
开始传输拒绝取消
传输中断
传输成功
图2文件传输流程图
2.4软件界面设计
本程序的文件传输系统的实现应包含服务端模块、客户端模块、界面显示模块等几个部分整个程序采用C#完成。程序使用流式套接字基于C/S模型。在设计GU I
- 4 -
界面时把客户端和服务端放在一个界面中根据用户需要将程序设置成客户端和服务端。
在通信的时候主要可以分为两个部分一个部分是控制信息的传输部分而另一个部分就是文件的传输部分。传送的控制信息可以包含发送文件的请求文件的名称、大小等。对于文件的传输 由于数据量相对来说比较大所以用两个线程来实现文件的传输一个线程用于发送一个线程用于接收。
此次文件传输软件界面设计如图2-5所示。软件设计大致有三模块组成:首先两台主机IP模块再者则是文件传输区包括文件的选择、接收与发送;最后作为完善增加了聊天区域完善了单纯文件传输功能这一弊端使软件更实用化。
而客户端图形界面(GUI)设计的中心问题是用户控制式。现代面向对象程序是事件驱动的对象响应事件(消息) 。友好的界面设计包括以下六点方针包括用户控制式、一致性、个性化和客户化、宽容、反馈。 由于客户端程序与服务器程序很类似所以客户机与服务器端基本一致先发起连接的则为客户机而且文件的互传也很方便只要安装了此软件你既可以把本地主机当做客户机向远地主机发送文件又可以把本地主机当做服务器接受从远地主机发来的文件。
此界面中用到的控件分别有:label (对方IP、文件正在传输) ; Button(连接、断开连接、监听、选择文件、发送、接收、清空、发送等) ;textbox(输入对方IP 的位置、显示状态的位置、聊天对话框) 。
3程序源代码public Form1 ()
{
InitializeComponent() ;try
{string str = Dns.GetHostName() ; ip = Dns.GetHostAddresses(str) ;localendpoint = new IPEndPoint(ip[0] , 2000) ; //用来传输文本的本地网络端点filelocalendpoint = new IPEndPoint(ip[0] , 4000) ; //传输文件的本地网络端点//实例化2个异步调用callback = new AsyncCallback(startreceivesocket) ;filecallback = new AsyncCallback(startfilereceivesocket) ; /
- 5 -
//实例化文本和文件监听tcplistener = new TcpListener(localendpoint) ;filetcplistener = new TcpListener(filelocalendpoint) ;this. lsb_Information. Items.Add("请选择监听或主动连接\r\n请确保对方处于监r\n否则需要重启这个这个程序\n") ;听状态才可发出连接申请\
}catch (Exception ex)
{
MessageBox.Show(ex.Message) ;
}
}
(1)启动线程并在后台运行在连接的时候打开private void openth0()
{th[0] = new Thread(new ThreadStart(th0process) ) ;th[0] . IsBackground = true;if (th[0] . IsAlive == false)th[0] .Start() ;
}private void openth1 ()
{th[1] = new Thread(new ThreadStart(th1process) ) ;th[1] . IsBackground = true;if (th[1] . IsAlive == false)th[1] .Start() ;
}
(2)听方等待被连接那一方的监听程序private void th0process()
{while (true)
- 6 -
{try
{
if (receivesocket != null)
{receivesocket.Blocking = true;length = receivesocket.Receive(bytesreceived, bytesreceived.Length,
0) ;receivestring =
System.Text.Encoding.GetEncoding("GB2312") .GetString(bytesreceived,0,length) ;this. Invoke(new showmessage(showmessagetotextbox1) , new object[]
{ receivestring } ) ;//这里是另外开的线程直接用赋值语句是不行的//不是主线程所以不能对form上的控件直接进行访问if (receivestring.Length > 9)if (receivestring.Substring(0, 9) == "对方断开了当前连接")
{this. Invoke(new resume(resumefunction) ) ; closefunction() ;
}if (receivestring.Length > 12)if (receivestring.Substring(0, 12) == "对方取消了发送文件的请求"){this. Invoke(new resume(resumefilefunction) ) ; closefilefunction() ;
}if (receivestring == "对方拒绝了您发送文件的请求")
{
Tudcloud是一家新开的主机商,提供VPS和独立服务器租用,数据中心在中国香港(VPS和独立服务器)和美国洛杉矶(独立服务器),商家VPS基于KVM架构,开设在香港机房,可以选择限制流量大带宽或者限制带宽不限流量套餐。目前提供8折优惠码,优惠后最低每月7.2美元起。虽然主机商网站为英文界面,但是支付方式仅支付宝和Stripe,可能是国人商家。下面列出部分VPS主机套餐配置信息。CPU:1cor...
香港最便宜的vps要多少钱?最便宜的香港vps能用吗?香港vps无需备案,整体性能好,而且租用价格便宜,使用灵活,因为备受站长喜爱。无论是个人还是企业建站,都比较倾向于选择香港VPS。最便宜的香港vps能用吗?正因为有着诸多租用优势,香港VPS在业内颇受欢迎,租用需求量也在日益攀升。那么,对于新手用户来说,香港最便宜的vps租用有四大要点是务必要注意的,还有易探云香港vps租用最便宜的月付仅18元...
RackNerd 商家从2019年上线以来争议也是比较大的,一直低价促销很多网友都认为坚持时间不长可能会跑路。不过,目前看到RackNerd还是在坚持且这次黑五活动也有发布,且活动促销也是比较多的,不过对于我们用户来说选择这些低价服务商尽量的不要将长远项目放在上面,低价年付套餐服务商一般都是用来临时业务的。RackNerd商家这次发布黑五促销活动,一共有五款年付套餐,涉及到多个机房。最低年付的套餐...