




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
哈尔滨工业大学课程结业报告陈 琳姓 名:09S003158学 号:计算机科学与技术所学专业:网络程序设计课程名称:2009-12-20提交日期: 目录1.基于TCP/IP及UDP的通信传输概述22.系统体系结构32.1面向TCP连接系统调用过程42.2面向UDP连接系统调用过程53.系统要求与功能实现53.1公共类设计53.1.1 IP地址操作类53.1.2 DNS相关类63.2 TCP文件传输73.2.1 服务器端73.2.2 客户端83.3 UDP文件传输93.3.1 服务器端103.3.2 客户端113.4线程池113.5其它124.试验结果125思考146结论和收获15基于socket套接字的文件传输软件的设计与实现1. 概述TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。TCP/IP协议使用范围极广,是目前异种网络通信使用的唯一协议体系,适用于连接多种机型,既可用于局域网,又可用于广域网,许多厂商的计算机操作系统和网络操作系统产品都采用或含有TCP/IP协议。TCP/IP协议已成为目前事实上的国际标准和工业标准。基于TCP/IP协议组的网络模型分为应用层、传输层、网络层、链路层和物理层这样五个层次。TCP/IP协议组位于应用程序和硬件之间,指挥数据在网络各层中传递。其中传输层的协议包括传输控制协议(TCP)和用户数据报协议(UDP) ,它们都建立在IP协议的基础上,其中TCP提供可靠的面向连接服务,UDP提供简单的无连接服务。传输层提供端到端,即应用程序之间的通信,主要功能是数据格式化、数据确认和丢失重传等。TCP协议是面向连接的协议,它提供可靠的字节流服务,在进行数据传输之前必须先建立连接,经三次握手确定后才开始数据传送。UDP进行数据报传输使用的是不可靠、无连接的协议。网络层包括互连网协议 IP,互连网控制报文协议 ICMP和互连网组管理协议IGMP。其中IP协议完成大部分的工作,负责数据传输和路由的选择等。I P报头中的地址和网卡相联系( 具体还涉及地址解析和反向地址解析协议),TCP 、UDP报头中的端口号侧对应着网络主机上不同的程序。TCP/IP体系结构如图一所示:图一 TCP/IP体系结构Socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。尽管TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层同时存在TCP和UDP两个协议。TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。UDP是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。 本文在Scoket原理基础上,基于.NET平台,利用线程池技术,设计并实现了分别面向TCP和UDP的可靠文件传输软件。2. 系统体系结构根据采用的协议不同,本软件分为基于TCP文件传输和基于UDP的可靠文件传输。在TCP/IP网络中两个进程间的相互作用的主机模式是C/S。在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务: 1、打开一通信通道并告知本地主机,它在某一个公认地址上接收客户请求; 2、等待客户请求到达该端口;3、接收到重复服务请求,处理该请求并发送应答信号;4、返回第2步,等待另一客户请求;5、关闭服务器。客户端:1、打开一通信通道,并连接到服务器所在主机的特定端口;2、向服务器发送服务请求报文,等待并接收应答;继续提出请求3、请求结束后关闭通信通道并终止。2.1面向TCP系统调用时序图图二 面向TCP的系统时序图2.2面向UDP系统调用时序图图三 面向UDP的系统时序图3.功能实现3.1公共类设计 软件设计时,TCP和UDP的服务器端为统一界面,客户端为统一界面。即服务器端既能够接受TCP连接,也能通过UDP进行接收;客户端可以通过TCP和UDP进行传输。3.1.1 IP地址操作类1、IPAddress类在该类中有一个Parse()方法,可以把点分的十进制IP表示转化IPAddress类,方法如下:IPAddress address = IPAddress.Parse(“9”); IPAddress提供4个只读字段Any 用于代表本地系统可用的任何IP地址Broadcase 用于代表本地网络的IP广播地址Loopback 用于代表系统的回送地址None 用于代表系统上没有网络接口其中IPAddress.Any最常用可以用来表示本机上所有的IP地址,这对于socket服务进行侦听时便使用,不用对每个IP进行侦听了。2、IPEndPoint类通过二种构造方法来创建IPEndPoint类:a、IPEndPoint(long address, int port)b、IPEndPoint(IPAddress address, int port)它有四个属性: AddressAddressFamilyPortMaxPortMinPortIPEndPoint是一个IP地址和端口的绑定,可以代表一个服务,用来Socket通讯。3.1.2 DNS相关类DNS类有四个静态方法,来获取主机DNS相关信息:1、GetHostName()通过Dns.GetHostName()可以获得本地计算机的主机名2、GetHostByName()根据主机名称,返回一个IPHostEntry 对象:IPHostEntry GetHostByName(string hostName)。其中IPHostEntry把一个DNS主机名与一个别名和IP地址的数组相关联,包含三个属性: AddressList:一个IPAddress对象的数组Aliases:一个字符串对象数组HostName:一个用于主机名的字符串对象3、GetHostByAddress()类似于GetHostByName(),只不过这里的参数是IP地址,而不是主机名,也返回一个IPHostEntry对象。IPHostEntry GetHostByAddress(IPAddress address)IPHostEntry GetHostByAddress(string address)4、Resolve()当不知道输入的远程主机的地址是哪种格式时(主机名或IP地址),用以上的二种方法来实现,可能还要通过判断客户输入的格式,才能正确使用,但Dns类提供一更简单的方法Resolve(),该方法可以接受或者是主机名格式或者是IP地址格式的任何一种地址,并返回IPHostEntry对象。3.2 TCP文件传输3.2.1 服务器端1、创建IPEndPoint实例,用于Socket侦听时绑定:IPEndPointipep=newIPEndPoint(IPAddress.Any,7000);2、创建套接字实例:serverSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);这里创建的时候用ProtocolType.Tcp,表示建立一个面向连接(TCP)的Socket。3、将所创建的套接字与IPEndPoint绑定:serverSocket.Bind(ipep)。4、设置套接字为收听模式:serverSocket.Listen(10)。5、在套接字上接收接入的连接在此使用.net的线程池类,默认情况下创建25个线程。从线城池中获取一个线程来处理客户端请求。ThreadPool.QueueUserWorkItem。6、在套接字上接受客户端发送的信息部分代码:BinaryReader reader = new BinaryReader(client.GetStream(); string filename = reader.ReadString(); long total = reader.ReadInt64(); string saveAs = GetSaveFile(filename); FileStream fs = File.Create(saveAs); try byte buffer = new byte8192; int len; while (total 0) len = reader.Read(buffer, 0, 8192); if (len = 0) throw new IOException(发送方中止了连接); fs.Write(buffer, 0, len); 3.2.2 客户端1、创建IPEndPoint实例和套接字;2、将套接字连接到远程服务器;clientSocket.Connect(ipep)3、发送信息FileInfo fi = new FileInfo(textBox1.Text); writer.Write(fi.Name); writer.Write(fi.Length); FileStream fs = fi.OpenRead();long total = fi.Length; byte buffer = new byte8192; int len; while (len = fs.Read(buffer, 0, 8192) != 0) writer.Write(buffer, 0, len); 客户端使用openFileDialog类选择文件,然后向服务器端传送文件长度和文件名,最后将需要传送的文件切割成以单位为8k的数据块进行传送。服务器端使用SaveFileDialog类选择存储文件的位置,然后接受客户端发送的文件名和文件长度,然后进行小数据块接受,使用循环,直至客户端发送完毕,服务器端在接受客户端连接请求时开辟了一个内存池。面向连接的程序流程图如下所示:图四 面向TCP的程序流程图3.3 UDP文件传输TCP是面向连接的,所以用TCP传输文件不会丢包。UDP是非面向连接的,所以UDP是不可靠的,用它传输文件,要保证不丢包,就需要额外代码来保障。本文采用的是在接受文件端来检测,当开始接收文件,收到一个数据包后,如果等待超过了一定时间后都没有收到数据包,就给发送方发送一个新的请求,要求继续发送文件,直到文件全部接收完成。流程图如下:图五 UDP传输流程3.3.1 服务器端在UDP服务器端设计过程中,部分步骤和实现代码与TCP相似,在此不再赘述。基本的实现步骤:1、创建一个socket,用函数socket();2、绑定IP地址、端口等信息到socket上,用函数bind();3、循环接收数据,用函数recvfrom();4、关闭网络连接;为了实现UDP的可靠传输,设计了ReceiveFileManager类,如下图所示:图六ReceiveFileManager类 可靠传输的具体做法是:1、在ReceiveFileManager类中加入一个记录文件分块接收状态的列表Dictionary,int表示文件分块的序号,bool表示是否已经接收,初始化为全部没有接受(false)。2、在ReceiveFileManager类中加入一个Timer,用来检测收到一个包后等待的时间是否超过了设置的值,超过就给发送方发送数据包,请求继续发送文件,需要发送的文件块序号为从Dictionary中查询出来的没有接收的文件块序号。3、如果Dictionary中的所有文件块已经收到(全部为true),文件就接收完成了。3.3.2 客户端在UDP客户端设计过程中,部分步骤和实现代码与TCP相似,在此不再赘述。基本的实现步骤:1、创建一个socket,用函数socket();2、绑定IP地址、端口等信息到socket上,用函数bind();3、设置对方的IP地址和端口等属性;4、发送数据,用函数sendto();5、关闭网络连接;为了保证UDP的可靠传输,客户端也需要对服务器端某个端口的发送来的信息进行监控,一旦服务器请求,则进行重传。 IPEndPoint remoteIP = new IPEndPoint(IPAddress.Any, 0); byte buffer = null; try buffer = UdpClient.EndReceive(result, ref remoteIP); catch (SocketException ex) throw ex; finally ReceiveInternal(); OnReceiveData(new ReceiveDataEventArgs(buffer, remoteIP);3.4线程池通过System.Threading 名称空间的Thread Pool 类来使用线程池,它所有的成员都是静态的,而且没有公开的构造函数。这个限制的目的是为了把所有的异步编程技术都集中到同一个池中。假如构造了含有两个线程的线程池,当三个请求到达时,它们立刻安排到队列等待被处理,因为两个线程都是空闲的,所以头两个请求开始执行。当其中任何一个请求处理结束后,空闲的线程就会去提取第三个请求并处理之。在这种场景中,系统不需要为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教育行业人才流失原因与吸引机制创新路径研究报告
- 2025年植物基因编辑技术在转基因植物抗病虫害育种中的应用成果鉴定报告
- 自卸吊车买卖合同协议书
- 泵车转卖合同协议书范本
- 防尘布工地销售合同范本
- 理疗店合伙协议合同范本
- 物业小区的广告合同协议
- 法院婚内财产协议书模板
- 竹制半成品采购合同范本
- 罗非鱼鱼苗订购合同范本
- 2025年施工员-土建方向-岗位技能(施工员)考试题库
- 河南省安阳市林州市2024-2025学年八年级下学期期末历史试卷 (含答案)
- 胸痛单元建设课件介绍
- 2025年广西中考语文试题卷(含答案)
- 2024广西专业技术人员继续教育公需科目参考答案(97分)
- 江苏省建筑与装饰工程计价定额(2014)电子表格版
- 湘少版小学全部英语单词
- 小学数学西南师大四年级下册八平均数小学数学西师版四年级下册《平均数》教学设计
- T-SDDA 0002-2021 住宅装饰装修工程质量验收标准
- 智慧机场贵宾厅建设方案
- CTPAT反恐文件1. 货物单据和文件记录安全控制程序
评论
0/150
提交评论