基于UDP协议的网络聊天程序设计_第1页
基于UDP协议的网络聊天程序设计_第2页
基于UDP协议的网络聊天程序设计_第3页
基于UDP协议的网络聊天程序设计_第4页
基于UDP协议的网络聊天程序设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、精选合同范本基于 UDP协议的网络聊天程序设计学生姓名: XX指导老师: XX摘要 本课程设计是是基于UDP 协议的网络聊天程序设计,UDP 协议是无连接的协议,是TCP/IP 协议的一种分层协议。通过本设计进一步掌握利用VisualC+进行程序设计的能力和运用面向对象程序设计的思想和方法, 初步掌握开发一个小型实用系统的基本方法,理解 Windows 程序的运行过程。本设计实现的聊天工具要求在 Microsoft Visual C+ 6.0 上,编写一个程序,采用 C/S 模式,模拟网络上的聊天软件, 实现在局域网上两台主机之间的通信。 且经过测试, 该聊天程序能够正常运行,实现了设计目标。

2、关键词UDP 协议;客户机 / 服务器;网络聊天1 引 言现在是网络的世界, 网络发展的不可估量了, 它可以包括我们生活中的方方面面,小到上网浏览新闻、上网购物,大到网上理财、网上会议,可以说网络把我们的世界变小了,即使在海角天边,只要有网络的地方我们就可以随时联系。最简单的形式就是进行网络聊天了,比如 QQ、 MSN 等等很简单的聊天工具,可以随时拉近你我的距离。本设计将基于 UDP 协议和局域网环境,实现一个即时聊天程序。1.1 本文主要内容精选合同范本本文第二节介绍了UDP 协议和客户机 / 服务器模式基本原理,第三节详细描述了设计思路和流程,第四节为本次课程设计的总结。1.2 设计平台

3、Microsoft Visual C+ 6.0 ,简称 VC 或者 VC6.0 ,是微软推出的一款C+编译器,将 “高级语言 ”翻译为 “机器语言(低级语言)”的程序。 Visual C+ 是一个功能强大的可视化软件开发工具。自1993 年 Microsoft 公司推出 Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了Visual C+.NET(Visual C+7.0) ,但它的应用有很大的局限性,只适用于Windows 2000、Windows XP 和 Windows NT4.0 。所以实际中,更多的是以Vi

4、sual C+6.0 为平台。Visual C+6.0 由 Microsoft 开发 , 它不仅是一个 C+ 编译器,而且是一个基 于Windows 操作 系统 的 可视 化集 成开 发环 境( integrated developmentenvironment, IDE)。Visual C+6.0 由许多组件组成,包括编辑器、调试器以及程序向导 AppWizard、类向导 Class Wizard 等开发工具。这些组件通过一个名为 Developer Studio 的组件集成为和谐的开发环境。 Microsoft 的主力软件产品。Visual C+是一个功能强大的可视化软件开发工具。自199

5、3 年 Microsoft 公司推出 Visual C+1.0 后,随着其新版本的不断问世, Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了Visual C+.NET(Visual C+7.0) ,但它的应用的很大的局限性,只适用于Windows 2000,Windows XP 和 WindowsNT4.0。所以实际中,更多的是以Visual C+6.0 为平台。2 设计原理精选合同范本2.1 UDP 协议原理UDP 协议的全称是用户数据报协议,在网络中它与TCP 协议一样用于处理数据包,是一种无连接的协议。在OSI 模型中,在第四层 传输层,处于IP协议的上一层

6、。 UDP 有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP 用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户 /服务器模式的网络应用都需要使用UDP 协议。UDP 协议从问世至今已经被使用了很多年, 虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天 UDP 仍然不失为一项非常实用和可行的网络传输层协议。UDP 是 OSI 参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中, 分组传输顺序的检查与排序由应用层完成, 提供面向事务的简单不可靠信息传送服务。 UD

7、P 协议基本上是 IP 协议与上层协议的接口。 UDP 协议适用端口分别运行在同一台设备上的多个应用程序。与所熟知的 TCP(传输控制协议)协议一样, UDP 协议直接位于 IP(网际协议)协议的顶层。根据 OSI(开放系统互连)参考模型, UDP 和 TCP 都属于传输层协议。UDP 协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8 个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。UDP 是无连接的,即发送数据之前不需要建立连接(当然发送数据结束时也没有连接可释放)因此减少了开销和发送数据之前的时延。UDP 使用的是

8、尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。UDP 是面向报文的。发送方的UDP 对应程序交下来的报文,在添加首部后就向下交付给 IP 层。 UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP 是定义用来在互连网络环境中提供数据报交换的计算机通信的协议。此协议默认是IP 下层协议。此协议提供了向另一用户程序发送信息的最简便的精选合同范本协议机制,不需要连接确认和保护复制,所以在软件实现上比较简单,需要的内存空间比起 TCP 相对较小。UDP 包头由 4 个域组成,其中每个域各占用2 个字节。(1)源端口号( 16 位): UDP 数据包的

9、发送方使用的端口号。(2)目标端口号( 16 位):UDP 数据包的接收方使用的端口号。UDP 协议使用端口号为不同的应用保留其各自的数据传输通道。UDP 和 rap 协议正是采用这一机制,实现对同一时刻内多项应用同时发送和接收数据的支持。(3)数据报长度( 16 位)。数据报的长度是指包括报头和数据部分在内的总的字节数。理论上,包含报头在内的数据包的最大长度为65535 字节。不过,一些实际应用往往会限制数据包的大小,有时会降低到8192 字节。(4)校验值( 16 位)。UDP 协议使用包头中的校验值来保证数据的安全。2.2 客户机 / 服务器模式由于这次课程设计是实现点到点的可靠连接,所

10、以在此使用UDP连接方式。在这个连接中,双方分为客户和服务器,他们各自的功能不同。客户机一方, UDP 应用程序功能如下:(1) 打开通信信道 (申请一套接字),并连接到服务器在主机的保留端口,该端口对应服务器的 UDP 进程。(2) 向服务器发出请求报文,等待接收应答。(3) 从服务器方收到最终应答结果, 或在不再请求时关闭信道并终止客户机进程。服务器一方, UDP 应用程序动作如下:(1) 打开通信信道(申请一套接字) ,通知本地主机在某一保留端口接收客户机请求。(2) 等待客户请求到达指定端口。(3) 接收到请求, 启动一新进程处理用户请求, 同时释放旧进程以响应新的客户请求,一旦服务完

11、成,关闭新进程与客户的通信链路。(4) 继续等待客户机请求。(5) 如果不想响应客户机请求,关闭服务器进程。精选合同范本3设计步骤3.1 总体设计思路基于 UDP 协议通信和基于TCP 协议的通信不同,基于UDP 的消息传递更快,但不提供可靠性的保证。也就是说,数据在传递的时候,用户无法知道数据能否正确的到达目的地主机, 也不能确定数据到达目的地的顺寻是否和发送的顺序相同。系统采用的是客户端/服务器工作模式,所以应有客户端和服务器两个类,其中客户端向服务器请求服务。而基于UDP 通信的基本模式是:将数据打包,称为数据包,然后将数据包发往目的地。接受别人发来的数据包,然后查看数据包的内容。3.2

12、 功能模块调用流程设计:精选合同范本服务器客户端Socket()Socket()Bind()Bind()双向通信ReceiveFrom()ReceiveFrom()/SendTo()/SendTo()Close()Close()图 3.1 程序设计流程图其中,服务器端: Socket(),建立流式套接字; Bind() ,将套接字和服务器地址结构绑定; ReceiveFrom()/SendTo(),在套接字上接收 / 发送数据; Close(),关闭套接字。客户端与服务器端同理。3.3 基于 UDP 的网络聊天程序实现精选合同范本基于 UDP 的聊天程序服务器端源程序:/创建套接字/第二个参数

13、和 TCP 设置不同SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);SOCKADDR_IN addrSrv; /设置服务器端套接字的地址结构的相关属性设置 IP addrSrv.sin_port = htons(20000); / / 设置端口号 addrSrv.sin_family = AF_INET;/将套接字和服务器地址结构绑定bind(sockSrv, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR) );char recvBuf100;char sendBuf100;char tempBuf100;S

14、OCKADDR_IN addrClient;int len = sizeof(SOCKADDR);/从客户端接收数据recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR *)& addrClient, & len);if ('q' = recvBuf0)sendto(sockSrv, "q", strlen("q") + 1, 0, (SOCKADDR*) & addrClient, len); cout << "chart end" <&l

15、t; endl;break;/退出循环/将对方发送过来的信息前段加上IP 地址进行输出精选合同范本sprintf(tempBuf, "%s say %sn", inet_ntoa(addrClient.sin_addr), recvBuf); cout << tempBuf << endl;/将用户的键盘输入发送到对方cout << "Please input message: " << endl;gets(sendBuf);sendto(sockSrv, sendBuf, strlen(sendBuf)

16、+ 1, 0, (SOCKADDR * )&addrClient, len);基于 UDP 的聊天程序客户端端源程序:/创建套接字SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);/第二个参数和 TCP 设置不同SOCKADDR_IN addrSrv;/服务器地址结构服务器地址 addrSrv.sin_port = htons(20000); /服务器端口号 addrSrv.sin_family = AF_INET;cout << "请输入发送的消息 : " << endl;gets(sen

17、dBuf);/得到用户的键盘输入/将对方发送过来的信息前段加上IP 地址进行输出sprintf(tempBuf, "%s say %sn", inet_ntoa(addrSrv.sin_addr), recvBuf);cout << tempBuf << endl;3.4 程序测试结果精选合同范本图 3.2客户端向服务器发送信息图 3.3服务器收到信息精选合同范本图 3.4服务器向客户端发送信息图 3.5客户端收到服务器信息4 结束语精选合同范本这次计算机网络课程设计历时两个星期,让我学到了很多很多的东西。不仅巩固了以前所学过的知识, 而且学到了很多

18、在书本上所没有学到过的知识。 当然,在这个过程中我也遇到了很多问题, 不过由于老师耐心的帮助和讲解, 使我更进一步加深了对计算机网络的了解, 让我对它有了更加浓厚的兴趣。 特别是当每一步成功时,心里特别的开心。总的来说,这次设计的基于 UDP 协议的网络聊天程序还是比较成功的,在设计中遇到了很多问题, 最后在老师的辛勤指导下, 终于迎刃而解, 有点小小的成就感,终于觉得平时所学的知识有了实用的价值, 达到了理论与实际相结合的目的,不仅学到了不少知识, 而且锻炼了自己的能力, 使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的

19、感谢!参考文献1 谢希仁计算机网络(第四版) M 北京:电子工业出版社, 20032 陆魁军 等计算机网络基础实践教程 M 北京:清华大学出版社, 20053 陈坚、陈伟编著 . Visual C+网络高级编程 . 北京 : 人民邮电出版社, 20014 吴功宜、胡晓英等编著 .计算机网络课程设计 .北京:机械工业出版社, 2010.8附件1:精选合同范本首先编写服务器端程序,实现代码如下:Chat Server#include <iostream>#include <WinSock2.h>#pragma comment(lib, "Ws2_32.lib&qu

20、ot;)using namespace std;int main(int argc, CHAR * argv)WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(2, 0);err = WSAStartup(wVersionRequested, & wsaData);if (err != 0 )cout << "WSAStartup Error!" << endl;return 1;if (LOBYTE(wsaData.wVersion) !=

21、 2 | HIBYTE(wsaData.wVersion) != 0) cout << "Version not rignt!" << endl; WSACleanup();return 1;/创建套接字/第二个参数和 TCP 设置不同SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);SOCKADDR_IN addrSrv; / / 设置服务器端套接字的地址结构的相关属性设置 IP addrSrv.sin_port = htons(20000); / / 设置端口号 addrSrv.sin_family

22、= AF_INET;精选合同范本/将套接字和服务器地址结构绑定bind(sockSrv, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR) );char recvBuf100;char sendBuf100;char tempBuf100;SOCKADDR_IN addrClient;int len = sizeof(SOCKADDR);while(1)/从客户端接收数据recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR *)& addrClient, & len);if ('q' = r

23、ecvBuf0)sendto(sockSrv, "q", strlen("q") + 1, 0, (SOCKADDR*) & addrClient, len);cout << "chart end" << endl;break;/退出循环/将对方发送过来的信息前段加上IP 地址进行输出sprintf(tempBuf, "%s say %sn", inet_ntoa(addrClient.sin_addr), recvBuf); cout << tempBuf <&l

24、t; endl;/将用户的键盘输入发送到对方cout << "Please input message: " << endl;gets(sendBuf);sendto(sockSrv, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR* )&addrClient,len);closesocket(sockSrv);WSACleanup();return 0;精选合同范本下面编写聊天客户端程序,实现代码如下:Chat client#include <iostream>#include <Wi

25、nSock2.h>#pragma comment(lib, "Ws2_32.lib") /静态加入一个 lib 文件 using namespace std;int main(int argc, CHAR * argv)WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(2, 0);err = WSAStartup(wVersionRequested, & wsaData);if (err != 0 )cout << "WSAStartup Error!" << endl;return 1;if (LOBYTE(wsaData.wVersion) != 2 | HIBYTE(wsaData.wVersion) != 0) cout << "Version not rignt!" << endl; WSACleanup();return 1;/创建套接字SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);/ 注意第二个参数和 TCP 设置不同SOCKA

温馨提示

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

最新文档

评论

0/150

提交评论