电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

基于TCP、UDP的聊天文件传输程序

18页
  • 卖家[上传人]:liy****000
  • 文档编号:373310883
  • 上传时间:2023-12-15
  • 文档格式:DOC
  • 文档大小:402.50KB
  • / 18 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、网络通信原理课程题 目 基于TCP、UDP的聊天文件传输程序目 录1 实验综述11.1 设计目标11.2 完成功能12 网络编程的预备知识12.1 TCP/IP协议族简介12.2 用户数据报协议UDP22.3 传输控制协议TCP33 编程实现53.1 编程环境53.2 QtNetwork63.3 整体结构和子模块划分74 关键模块分析94.1 聊天内容传输模块94.2 文件传输模块105 开发工具135.1 测试环境135.2 测试步骤136 实验总结156.1 个人收获156.2 待改善的问题157 参考资料16 研究生宽带通信网原理实验报告 1 实验综述1.1 设计目标TCP/IP协议是Internet的基础和最基本的网络协议。本实验利用了UDP和TCP协议,实现一个具有聊天功能和文件传输功能的QT插件。实验中使用非面向连接的UDP协议实现文字传输的功能,使用面向连接的TCP协议实现文件传输的功能。1.2 完成功能(1)布局界面,创建若干个按钮和输入控件和一个现实控件,如图1所示。(2)利用UDPSOCKET实现网络聊天的功能。(3)利用TCPSOCKET实现文件传输的功能。图1

      2、程序界面2 网络编程的预备知识2.1 TCP/IP协议族简介TCP/IP体系结构分为四层,分别是网络接口层、网际层、运输层和应用层。如图2所示的一种分层次画出具体协议的表示图可知,TCP/IP协议族具有“两头大而中间小”的特点。应用层和网络接口层都有多种协议,而中间的IP层是最小的,上层的各种协议都向下汇聚到一个IP协议中。这种沙漏型的结构表明:TCP/IP协议可以为各式各样的应用提供服务(所谓的everything over IP)。同时TCP/IP协议也允许IP协议在各式各样的网络结构中构成互联网上运行(所谓的IP over everything)。正因为如此,因特网才会发展到今天这种全球规模。从图2不难看出IP协议在因特网中起到核心的作用。我们应该知道的是,TCP/IP中的运输层向高层用户屏蔽了下层的网络核心细节(如网络拓扑、路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,尽管下层可能存在着非常复杂的协议。图2 TCP/IP协议族示意图 运输层有两个主要的协议,分别是面向连接的TCP协议和无连接的UDP协议。下面详细介绍这两个协议。2.

      3、2 用户数据报协议UDP 用户数据报协议(User Datagram Protocol, UDP)是一种无连接的网络协议,它只是在IP的数据报服务之上增加了很少的功能,即复用和解复用以及差错检测的功能。UDP的主要特点是:(1)UDP是无连接的,即发送数据之前不需要建立连接(当然发送数据结束之后也没有连接需要释放),因此减少了开销和发送数据之前的时延。(2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。(3)UDP是面向报文的。发送方的UDP对应用程序交下来的报文仅添加首部之后就交付给IP层,也就是说,应用层交给UDP多长的报文,UDP照样发送。所以应用程序应该选择合适的报文大小,若报文过长,则IP层将会对UDP报文进行分片,降低了IP层的效率;反之,若报文太短,则导致IP首部相对过大,也降低了IP层的效率(4)UDP没有拥塞控制,因此网络出现拥塞不会对主机的发送速率造成影响。这对实时应用是很重要的。(5)UDP支持一对一、一对多、多对一和多对多的交互通信。(6)UDP首部仅有8个字节,开销较小。2.3 传输控制协议TCP传输控制协议(Transmis

      4、sion Control Protocol,TCP)是TCP/IP体系中非常复杂的一个协议,它具有如下特点:(1)TCP是面向连接的运输层协议。这就是说,应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据结束之后,必须释放已建立的TCP连接。(2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。(3)TCP提供可靠交付服务。也就是说,用户可以通过协议无差错、不丢失、不重复且按序到达地传输数据。(4)TCP提供全双工通信。它允许连接的双方在任何时候发送数据。(5)面向字节流。TCP中的“流”指的是流入进程和从进程流出的字节序列。即应用程序与TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据块仅看成一连串无结构的字节流。图3 TCP面向流的概念TCP对应用进程一次把多长的报文发到TCP的缓存器中并不关心,它会根据其发送窗口的大小来调整一个报文段有多长。如果发送来的数据太长,则它将对数据进行分段,如果太短,则会等待数据达到一定大小再发送。TCP所谓的面向连接并不是指真正的物理连接,而是一条建立在各种可靠性保障机制上的序连接。连接是TCP最基本的抽象,TC

      5、P的很多特性都与其面向连接的这个基本特性有关。如前所述,每一条TCP连接有两个端点,这个端点不是主机,不是IP地址、不是进程也不是运输层的端口,而是叫做套接字(SOCKET)。其定义是端口号拼接到点分十进制表示的IP地址上,用冒号或者逗号隔开。例如,有IP地址218.192.169.130而端口号是80,那么得到的套接字则为(218.192.169.130:80)。总之,我们有套接字socket = (IP地址:端口号)每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:TCP连接:= socket1,socket2 = (IP:port1),(IP,port2)总而言之,TCP连接就是由协议软件所提供的一种抽象。有时为了方便,我们也可以说,在一个应用进程和另一个应用进程之间建立了一条TCP连接,但被连接的两端是套接字,同一个地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中。TCP的可靠传输依靠于一系列复杂的机制,例如超时重传、拥塞控制等等,不作详述。3 编程实现3.1 编程环境Qt是一个1991年由奇趣科技开发的跨平台C+图形用户界面

      6、应用程序开发框架。它既可以开发GUI程序,也可开发非GUI程序,比如控制台和服务器。Qt是面向对象语言,易于扩展,并且允许组件编程。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。Qt与其他开发工具包最不相同的部分是它的“信号和槽”(signal and slot)机制,这也是它的中心特征。图4 信号和槽示意图在图形用户界面编程中,我们希望一个窗口部件的一个变化被通知给另外一个窗口部件。更一般地,我们希望任何一类的对象可以与其他对象进行通信。较老的工具包使用一种被称作回调的通讯方式来实现同一目的。回调是指一个函数指针,所以如果你希望一个处理函数通知你一些事件,你可以把另一个函数回调的指针传递给处理函数。处理函数在适当的时候调用回调。回调有两个主要的缺点。首先他们不是类型安全的。我们从不确定处理函数使用了正确的参数来调用回调。其次回调和处理函数是非常强地联系在一起的,因为处理函数必须知道要调用哪个回调。信号和槽机制是指,当一个特定事件发生的时候,一个信号被发射。Qt的

      7、窗口部件有很多预定义的信号, 但是我们总是可以通过继承来加入我们自己的信号。槽就是一个可以被调用处理特定信号的函数。Qt的窗口部件又很多预定义的槽,但是通常的习惯是你可以加入自己的槽,这样你就可以处理你所感兴趣的信号。信号和槽的机制是类型安全的:一个信号的签名必须与它的接收槽的签名相匹配。(实际上一个槽的签名可以比它接收的信号的签名少,因为它可以忽略额外的 签名。)因为签名是一致的,编译器就可以帮助我们检测类型不匹配。信号和槽是宽松地联系在一起的:一个发射信号的类不用知道也不用注意哪个槽要接收这个信号。Qt的信号和槽的机制可以保证如果你把一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。信号和槽可以使用任何数量、任何类型的参 数。它们是完全类型安全的:不会再有回调核心转储(core dump)。从QObject类或者它的一个子类 (比如QWidget类)继承的所有类可以包含信号和槽。 当对象改变它们的状态的时候,信号被发送,从某种意义上讲,它们也许对外面的世界感兴趣。这就是所有的对象通讯时所做的一切。它不知道也不注意无论有没有 东西接收它所发射的信号。这就是真正的信息封

      8、装,并且确保对象可以用作一个软件组件。3.2 QtNetworkQtNetwork是QT为用户提供网络功能的库,里面封装好许多个类为用户所用。本次试验用到的是QTcpServer、QTcpSocket和QUdpSocket这三个类。QTcpServer提供一个TCP基础服务类,这个类用来接收到来的TCP连接,可以指定TCP端口或者用QTcpServer挑选一个端口,可以监听一个指定的地址或者所有的机器地址。用它的listen()函数监听所有连接,在有客户端连接到服务器端就会发射一个newConnection()信号,此时可以调用nextPendingConnection()来接受待处理的连接,并返回一个QTcpSocket,我们可以用这个返回的套接字和客户端连接并通信。QTcpSocket类提供一个套接字,可以用bind()函数绑定一个主机的端口,也可以用connectToHost()函数请求一个TCP连接。QUdpSocket类可以用来发送和接收UDP数据报。采用UDP时,数据是以数据报的形式从一个主机发送到另一个主机的,此中没有连接的概念,如果UDP数据报没有成功发送,它并不会向发

      9、送者发送任何错误报告。3.3 整体结构和子模块划分图5 整体结构图程序由主界面(TestWork)、TCP服务器类(MyServer)、发送文件类(Sender)和接收文件类(Receiver)组成。MyServer类派生自QTcpServer类,实质上是图6 主界面类的结构图一个TCP服务器,程序启动时就会调用它建立一个服务器进行TCP连接的监听。当一个新的连接请求到来时,它将生成一个选项框(QMessageBox)作传输控制,用户单击Yes后接收端才建立套接字传输数据,传输完成后双方都关闭套接字。等待下一次的连接。传输文件子模块可以理解为一个C/S结构的程序,客户端只有在向服务器提出文件传输的请求,服务器,即接收端才根据请求分配一个新的套接字进行传输任务,然而在程序运行的任何时刻,用户都可以使用聊天的功能,这由QUdpSocket来完成。主界面类(TestWork)为整个程序提供一个交互界面,完成所有交互功能,结构如图6所示。它包括了一些按钮和输入控件,一个用于显示聊天内容和一些信息提示的文本浏览器。除了提供界面外,该类还完成了聊天内容的收发。聊天是通过UDP数据包来实现的。图7 服务器类(Myserver)结构图服务器类(Myserver)监听文件传输的请求,并且每当新连接到来时实例化一个接收文件类(Receiver),实现文件的传输。当用户点击发送按钮时,程序就会实例化一个Sender类,如图8所示,并向该类待传输文件的路径,然后发送文件。接收文件类(Receiver)与发送类十分

      《基于TCP、UDP的聊天文件传输程序》由会员liy****000分享,可在线阅读,更多相关《基于TCP、UDP的聊天文件传输程序》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.