基于UDP协议的网络聊天程序的设计说明Word文档下载推荐.docx

上传人:b****2 文档编号:13795645 上传时间:2022-10-13 格式:DOCX 页数:12 大小:160.55KB
下载 相关 举报
基于UDP协议的网络聊天程序的设计说明Word文档下载推荐.docx_第1页
第1页 / 共12页
基于UDP协议的网络聊天程序的设计说明Word文档下载推荐.docx_第2页
第2页 / 共12页
基于UDP协议的网络聊天程序的设计说明Word文档下载推荐.docx_第3页
第3页 / 共12页
基于UDP协议的网络聊天程序的设计说明Word文档下载推荐.docx_第4页
第4页 / 共12页
基于UDP协议的网络聊天程序的设计说明Word文档下载推荐.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于UDP协议的网络聊天程序的设计说明Word文档下载推荐.docx

《基于UDP协议的网络聊天程序的设计说明Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于UDP协议的网络聊天程序的设计说明Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。

基于UDP协议的网络聊天程序的设计说明Word文档下载推荐.docx

1.1本文主要内容

本文第二节介绍了UDP协议和客户机/服务器模式基本原理,第三节详细描述了设计思路和流程,第四节为本次课程设计的总结。

1.2设计平台

MicrosoftVisualC++6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。

VisualC++是一个功能强大的可视化软件开发工具。

自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。

虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用有很大的局限性,只适用于Windows2000、WindowsXP和WindowsNT4.0。

所以实际中,更多的是以VisualC++6.0为平台。

VisualC++6.0由Microsoft开发,它不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。

VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。

这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。

Microsoft的主力软件产品。

虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。

2设计原理

2.1UDP协议原理

UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。

在OSI模型中,在第四层——传输层,处于IP协议的上一层。

UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

UDP用来支持那些需要在计算机之间传输数据的网络应用。

包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。

UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。

UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务的简单不可靠信息传送服务。

UDP协议基本上是IP协议与上层协议的接口。

UDP协议适用端口分别运行在同一台设备上的多个应用程序。

与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。

根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。

UDP协议的主要作用是将网络数据流量压缩成数据包的形式。

一个典型的数据包就是一个二进制数据的传输单位。

每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

UDP是无连接的,即发送数据之前不需要建立连接(当然发送数据结束时也没有连接可释放)因此减少了开销和发送数据之前的时延。

UDP使用的是尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。

UDP是面向报文的。

发送方的UDP对应程序交下来的报文,在添加首部后就向下交付给IP层。

UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。

UDP是定义用来在互连网络环境中提供数据报交换的计算机通信的协议。

此协议默认是IP下层协议。

此协议提供了向另一用户程序发送信息的最简便的协议机制,不需要连接确认和保护复制,所以在软件实现上比较简单,需要的内存空间比起TCP相对较小。

UDP包头由4个域组成,其中每个域各占用2个字节。

(1)源端口号(16位):

UDP数据包的发送方使用的端口号。

(2)目标端口号(16位):

UDP数据包的接收方使用的端口号。

UDP协议使用端口号为不同的应用保留其各自的数据传输通道。

UDP和rap协议正是采用这一机制,实现对同一时刻内多项应用同时发送和接收数据的支持。

(3)数据报长度(16位)。

数据报的长度是指包括报头和数据部分在内的总的字节数。

理论上,包含报头在内的数据包的最大长度为65535字节。

不过,一些实际应用往往会限制数据包的大小,有时会降低到8192字节。

(4)校验值(16位)。

UDP协议使用包头中的校验值来保证数据的安全。

2.2客户机/服务器模式

  由于这次课程设计是实现点到点的可靠连接,所以在此使用UDP连接方式。

在这个连接中,双方分为客户和服务器,他们各自的功能不同。

客户机一方,UDP应用程序功能如下:

(1)打开通信信道(申请一套接字),并连接到服务器在主机的保留端口,该端口对应服务器的UDP进程。

(2)向服务器发出请求报文,等待接收应答。

(3)从服务器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进程。

服务器一方,UDP应用程序动作如下:

(1)打开通信信道(申请一套接字),通知本地主机在某一保留端口接收客户机请求。

(2)等待客户请求到达指定端口。

(3)接收到请求,启动一新进程处理用户请求,同时释放旧进程以响应新的客户请求,一旦服务完成,关闭新进程与客户的通信链路。

(4)继续等待客户机请求。

(5)如果不想响应客户机请求,关闭服务器进程。

3设计步骤

3.1总体设计思路

基于UDP协议通信和基于TCP协议的通信不同,基于UDP的消息传递更快,但不提供可靠性的保证。

也就是说,数据在传递的时候,用户无法知道数据能否正确的到达目的地主机,也不能确定数据到达目的地的顺寻是否和发送的顺序相同。

系统采用的是客户端/服务器工作模式,所以应有客户端和服务器两个类,其中客户端向服务器请求服务。

而基于UDP通信的基本模式是:

将数据打包,称为数据包,然后将数据包发往目的地。

接受别人发来的数据包,然后查看数据包的内容。

3.2功能模块调用流程设计:

双向

通信

Socket()

Bind()

ReceiveFrom()

/SendTo()

Close()

图3.1程序设计流程图

其中,服务器端:

Socket(),建立流式套接字;

Bind(),将套接字和服务器地址结构绑定;

ReceiveFrom()/SendTo(),在套接字上接收/发送数据;

Close(),关闭套接字。

客户端与服务器端同理。

3.3基于UDP的网络聊天程序实现

3.3.1基于UDP的聊天程序服务器端源程序:

//创建套接字

//第二个参数和TCP设置不同

SOCKETsockSrv=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_INaddrSrv;

//设置服务器端套接字的地址结构的相关属性

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

//设置IP

addrSrv.sin_port=htons(20000);

////设置端口号

addrSrv.sin_family=AF_INET;

//将套接字和服务器地址结构绑定

bind(sockSrv,(SOCKADDR*)&

addrSrv,sizeof(SOCKADDR));

charrecvBuf[100];

charsendBuf[100];

chartempBuf[100];

SOCKADDR_INaddrClient;

intlen=sizeof(SOCKADDR);

//从客户端接收数据

recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&

addrClient,&

len);

if('

q'

==recvBuf[0])

{

sendto(sockSrv,"

q"

strlen("

)+1,0,(SOCKADDR*)&

addrClient,len);

cout<

<

"

chartend"

<

endl;

break;

//退出循环

}

//将对方发送过来的信息前段加上IP地址进行输出

sprintf(tempBuf,"

%ssay%s\n"

inet_ntoa(addrClient.sin_addr),recvBuf);

tempBuf<

//将用户的键盘输入发送到对方

Pleaseinputmessage:

gets(sendBuf);

sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&

addrClient,len);

3.3.2基于UDP的聊天程序客户端端源程序:

SOCKETsockClient=socket(AF_INET,SOCK_DGRAM,0);

//第二个参数和TCP设置不同

SOCKADDR_INaddrSrv;

//服务器地址结构

addrSrv.sin_addr.S_un.S_addr=inet_addr("

127.0.0.1"

);

//服务器地址

//服务器端口号

cout<

请输入发送的消息:

gets(sendBuf);

//得到用户的键盘输入

//将对方发送过来的信息前段加上IP地址进行输出

inet_ntoa(addrSrv.sin_addr),recvBuf);

tempBuf

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1