UDP服务器设计.docx

上传人:b****8 文档编号:9549277 上传时间:2023-02-05 格式:DOCX 页数:13 大小:75.86KB
下载 相关 举报
UDP服务器设计.docx_第1页
第1页 / 共13页
UDP服务器设计.docx_第2页
第2页 / 共13页
UDP服务器设计.docx_第3页
第3页 / 共13页
UDP服务器设计.docx_第4页
第4页 / 共13页
UDP服务器设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

UDP服务器设计.docx

《UDP服务器设计.docx》由会员分享,可在线阅读,更多相关《UDP服务器设计.docx(13页珍藏版)》请在冰豆网上搜索。

UDP服务器设计.docx

UDP服务器设计

计算机网络课程设计集中上机实验报告

学生:

学号:

班级:

专业:

重庆邮电大学移通学院

2014年12月

一.课程设计的目的和意义

1.1课程设计的目的

目的:

设计一个基于UDP的服务器

1.2课程设计的意义

意义:

UDP是TCP/IP协议族为传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的,不可靠的协议。

UDP在一个较低的水平上完成进程之间的通信,在收到分组的时候没有流量控制机制也没有确认机制,适用于可靠性比较高的局域网。

由于UDP采取了无连接的方式,因此协议简单,在一些特定的应用中协议运行效率高。

UDP适合一些实时的应用,如IP电话,视频会议,它们要求源主机以恒定的速率发送数据,并且在网络出现拥塞时,可以丢失一些数据,但是延迟不能太大。

基于这些特点,流式多媒体通信、多播等应用在传输层采用的就是UDP协议。

因为UDP具有TCP所望尘莫及的速度优势。

虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。

反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

二.课程设计题目和要求

2.1UDP服务器的设计

UDP是TCP/IP协议族为传输层设计的两个协议之一,是一种无连接的,不可靠的协议。

由于UDP采取了无连接的方式,因此协议简单,在一些特定的应用中协议运行效率高。

UDP适合一些实时的应用,如IP电话、视频会议,它们要求源主机以恒定的速率发送数据,并且在网络出现拥塞时,可以丢失一些数据,但是延迟不能太大。

基于这些特点,流式多媒体通信、多播等应用在传输层采用的就是UDP协议。

编写UDP服务器程序,流畅地完成视频文件地传输,要能对多个客户端进行管理。

需要通过UDP模拟多个客户端连接验证的情况。

2.2UDP服务器设计的要求

编写程序,设计UDP服务器。

因为考虑到实时性,所以选择UDP为主要的网络通信技术。

(1)程序能流畅地完成信息内容的传输和接收。

(2)要能对多个客服端进行管理。

需要通过UDP模拟多个客服端连接验证的情况。

(3)操作系统、使用语言和编译环境不限,但在作业中必须注明。

2.3UDP服务器的设计原理

UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。

在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

(1)C++编程技术

C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言[1]。

应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。

它支持过程化程序设计,数据抽象,面向对象设计,制作图标等多种程序设计风格。

(2)TCP/IP协议技术

在T C P / I P协议族中,有两个互不相同的传输协议:

 T C P(传输控制协议)和U D P(用户数据报协议)。

T C P为两台主机提供高可靠性的数据通信。

它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。

由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。

而另一方面, U D P则为应用层提供一种非常简单的服务。

它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。

任何必需的可靠性必须由应用层来提供。

(3)TCP/IP协议与Winsock网络编程接口

Winsock规范不是一种网络协议,而是一套开放的、支持多种协议的Windows写的网络编程接口。

Winsock可以访问很多种网络协议,可以把它当作一种协议的封装。

现在的Winsock已经基本上实现了与协议无关,可以使用Winsock来调用协议的功能

(4)WinsockAPI的使用

下面给出了使用Winsock进行编程时涉及的主要函数:

WSAStartup函数、WSACleanup函数、socket函数、closesocket函数、send函数、recv函数、bind函数、listen函数、accept函数、connect函数

三.详细设计

3.1需求分析

随着信息化的全面建设和普及中,服务器的角色举足轻重,它为计算机提供网络和技术的服务,也是整个网络系统的核心部分,中小企业的建设会有很多波折和阻碍,前期是资金问题,在服务器方面秉着少花钱多办事,高回报的原则。

对于服务器方面能省则省,对于设置专门的技术人员维护服务器的企业也是屈指可数的,所以一般会选择服务器租用服务和服务器代维服务,这对于服务器方面的开支就在可控成本之内了。

价格低廉,服务器有了稳定保障,这也是目前很多中小企业的普遍做法。

其次就是在挑选服务器方面,根据企业的实际业务,明确规划服务器租用方向是很有必要的,随着业务量的不断上升,调整服务器的配置,从而保证资金和服务器得到充分利用。

目前企业级的服务器大致有文件服务器,数据库服务器,邮件服务器,web服务器,多媒体服务器,终端服务器等类型。

这些服务器是根据企业的不同业务设置的。

UDP服务器是采用UDP协议的一类服务器的统称。

UDP不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

比如我们聊天用的ICQ和QQ就是使用的UDP协议。

所以根据企业的发展方向和业务要求,合理的搭配是很有必要的。

3.2相关设计

设计UDP服务器的过程如下所示。

首先,创建又一个Socket并监听。

然后启动线程接收数据。

用一个链表保存所有连上的客户,并通知连接成功。

这样,客户就有机会处理这一事件并作一些动作。

最后,当客户断开时,向服务器发送一个事件,服务器就可以做一些收尾工作。

其中最关键的部分是收发部分和数据处理部分。

3.3程序流程

图2.1服务器工作流程

3.4客户机一方的工作流程

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

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

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

3.5服务器一方的工作流程

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

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

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

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

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

四.代码及注解

4.1客户端程序代码

#include

#include

#pragmacomment(lib,"WS2_32")//链接到WS2_32.lib

BOOLInitWinsock();//初始化winsock

voidmain()

{

SOCKETsocket1;//定义套接字

InitWinsock();//初始化winsock

structsockaddr_inserver;//定义结构体

intlen=sizeof(server);//定义结构体的长度

server.sin_family=AF_INET;//server的地址族

server.sin_port=htons(1000);///server的监听端口

server.sin_addr.s_addr=inet_addr("172.16.93.187");///server的地址

socket1=socket(AF_INET,SOCK_DGRAM,0);//给套接字赋值

while

(1)//使可以循环输入

{

charbuffer[1024]="\0";//定义缓冲区

printf("inputmessage\n");//提示输入

scanf("%s",buffer);//输入

if(strcmp(buffer,"bye")==0)//比较字符串

break;

if(sendto(socket1,buffer,sizeofbuffer,0,(structsockaddr*)&server,len)!

=SOCKET_ERROR)//发送数据

{

if(recvfrom(socket1,buffer,sizeofbuffer,0,(structsockaddr*)&server,&len)!

=SOCKET_ERROR)//接受数据

printf("recefromserver:

%s\n",buffer);

}

}

closesocket(socket1);//关闭套接字

}

BOOLInitWinsock()

{

intError;

WORDVersionRequested;//版本号

WSADATAWsaData;

VersionRequested=MAKEWORD(2,2);//版本2的套接字

Error=WSAStartup(VersionRequested,&WsaData);//启动WinSock2

if(Error!

=0)

{

returnFALSE;

}//加载套接字库失败则返回

else

{

if(LOBYTE(WsaData.wVersion)!

=2||HIBYTE(WsaData.wHighVersion)!

=2)//判断版本

{

WSACleanup();//解除绑定并释放空间

returnFALSE;

}

}

returnTRUE;

}//如果不是版本2则退出

4.2服务器端程序

#include

#include

#pragmacomment(lib,"WS2_32")//链接到WS2_32.lib

BOOLInitWinsock();

voidmain()

{

SOCKETsocket1;//定义套接字

InitWinsock();

structsockaddr_inlocal;

structsockaddr_infrom;

intfromlen=sizeof(from);

local.sin_family=AF_INET;

local.sin_port=htons(1000);///监听端口

local.sin_addr.s_addr=INADDR_ANY;///本机

socket1=socket(AF_INET,SOCK_DGRAM,0);

bind(socket1,(structsockaddr*)&local,sizeoflocal);

while

(1)

{

charbuffer[1024]="\0";

printf("waitingformessagefromothers-------------\n");

if(recvfrom(socket1,buffer,sizeofbuffer,0,(structsockaddr*)&from,&fromlen)!

=SOCKET_ERROR)

{

printf("Receiveddatagramfrom%s--%s\n",inet_ntoa(from.sin_addr),buffer);

////给cilent发信息

sendto(socket1,buffer,sizeofbuffer,0,(structsockaddr*)&from,fromlen);

}

Sleep(500);

}

closesocket(socket1);

 

}

BOOLInitWinsock()

{

intError;

WORDVersionRequested;

WSADATAWsaData;

VersionRequested=MAKEWORD(2,2);

Error=WSAStartup(VersionRequested,&WsaData);//启动WinSock2

if(Error!

=0)

{

returnFALSE;

}

else

{

if(LOBYTE(WsaData.wVersion)!

=2||HIBYTE(WsaData.wHighVersion)!

=2)

{

WSACleanup();

returnFALSE;

}

}

returnTRUE;

}

五.程序运行结果分析

5.1Windows下的测试运行情况

a)查询IP地址:

得到IP地址为172.16.93.187

图1:

查询IP地址

b)将IP地址为172.16.93.187的计算机作为客户端的结果

图2:

客户端发送信息

c)服务器接受信息的情况

图3:

服务器接受信息的状况

六.课程设计小结

我们这组的课题是UDP服务器设计,其主要研究内容在于实现文件的传输及接收。

我们首先是了解UDP的定义,即确定UDP究竟是个什么协议,它有些什么性质和特征,它应用于那些方面。

经过了解知道了UDP是TCP/IP协议族为传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的、不可靠的协议。

分析后知道了UDP其实就是用来实现网络中文件的传输和接收的协议。

知道它的实质后,接下来我们就开始思考具体的UDP实现的程序,该程序分为客户端和服务器端两部分,客户端主要是执行文件或消息的发送,服务器端则主要是接收这些内容。

整个程序最重要也是最有难度的部分就是如何把发送和接收两部分联系在一起,经过查阅了一些资料,我们终于攻克了这个难题,这样我们就把程序的功能充分的实现出来了。

同时在编写MFC下的服务器和客户端时,要注意安全处理种种联接请求和断开请求。

而且这次的课程设计过程中,我们接触到了全新的编程方法-Winsock,使我们学到了新知识。

具体的,通过这次的课程设计,我们掌握了如下的一些新知识:

(1)Winsock库的加载和卸载等。

(2)UDP套接字的创建、绑定和关闭。

(3)各张套接字选项的设定,如广播类型、重用类型、数据报的TTL值等。

(4)UDP数据报的发送和接收方法。

(5)Winsock中加入组播组的方法。

七.参考书目

[1]吴功宜﹑胡晓英﹑张仁﹑何云﹑王宁.计算机网络课程设计.机械工业出版社,2007年12月

[2]张尧学﹑郭国强﹑王晓春﹑赵艳标.计算机网络与Internet教材(第二版).清华大学出版社,2006年11月

[3]UDP服务器设计过程总结中科设计园文章

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

当前位置:首页 > 总结汇报 > 学习总结

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

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