UDP服务器设计课程设计.docx
- 文档编号:30235568
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:10
- 大小:63.95KB
UDP服务器设计课程设计.docx
《UDP服务器设计课程设计.docx》由会员分享,可在线阅读,更多相关《UDP服务器设计课程设计.docx(10页珍藏版)》请在冰豆网上搜索。
UDP服务器设计课程设计
四川理工学院
课程设计书
-
学院计算机学院
专业计算机科学与技术
班级实验二班
题目UDP的服务器设计
教师
学生
>
$
%
组员分工情况
小组成员
负责任务
:
钟寒梅
发送部分代码编写及注释,
DOS下运行的服务器,
客户端实现
张俊威
接收部分代码编写及注释,
相关资料整理,
》
MFC的客户端实现
张泽泉
数据处理部分代码编写及注释,
MFC的服务器实现,
实验报告的编写
一课程设计的目的和意义
¥
目的:
设计一个基于UDP的服务器
意义:
UDP是TCP/IP协议族为传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的,不可靠的协议。
UDP在一个较低的水平上完成进程之间的通信,在收到分组的时候没有流量控制机制也没有确认机制,适用于可靠性比较高的局域网。
由于UDP采取了无连接的方式,因此协议简单,在一些特定的应用中协议运行效率高。
UDP适合一些实时的应用,如IP电话,视频会议,它们要求源主机以恒定的速率发送数据,并且在网络出现拥塞时,可以丢失一些数据,但是延迟不能太大。
基于这些特点,流式多媒体通信、多播等应用在传输层采用的就是UDP协议。
因为UDP具有TCP所望尘莫及的速度优势。
虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。
反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。
二、课程设计的内容和要求
编写程序,设计UDP服务器。
因为考虑到实时性,所以选择UDP为主要的网络通信技术。
(1)程序能流畅地完成信息内容的传输和接收。
!
(2)要能对多个客服端进行管理。
需要通过UDP模拟多个客服端连接验证的情况。
(3)操作系统、使用语言和编译环境不限,但在作业中必须注明。
三、课程设计的相关技术
(1)UDP协议技术
UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。
在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
(2)C++编程技术
(3)<
(4)TCP/IP协议技术
在T C P / I P协议族中,有两个互不相同的传输协议:
T C P(传输控制协议)和U D P(用户数据报协议)。
T C P为两台主机提供高可靠性的数据通信。
它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。
由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
而另一方面, U D P则为应用层提供一种非常简单的服务。
它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。
任何必需的可靠性必须由应用层来提供。
(5)TCP/IP协议与Winsock网络编程接口
Winsock规范不是一种网络协议,而是一套开放的、支持多种协议的Windows写的网络编程接口。
Winsock可以访问很多种网络协议,可以把它当作一种协议的封装。
现在的Winsock已经基本上实现了与协议无关,可以使用Winsock来调用协议的功能
(6)WinsockAPI的使用
下面给出了使用Winsock进行编程时涉及的主要函数:
WSAStartup函数、WSACleanup函数、socket函数、closesocket函数、send函数、recv函数、bind函数、listen函数、accept函数、connect函数
]
四、课程设计过程
设计思路
设计UDP服务器的过程如下所示。
首先,创建又一个Socket并监听。
然后
启动线程接收数据。
用一个链表保存所有连上的客户,并通知连接成功。
这样,客户就有机会处理这一事件并作一些动作。
最后,当客户断开时,向服务器发送一个事件,服务器就可以做一些收尾工作。
其中最关键的部分是收发部分和数据处理部分。
服务器的主要工作流程如图1所示:
,
Bind()
Socket()
Readfrom()
等待客户请求
处理服务请求
Sendto()
)
Close()
Socket()
Bind()
Sendto()
Readfrom()
Close()
服务请求
服务应答
!
服务器
客户机
图1服务器工作流程
客户机一方的工作流程如下:
(1)'
(2)打开通信信道(申请一个套接字),并连接到服务器在主机的保留端口,该端口对应服务器的UDP进程。
(3)向服务器发出请求报文,等待接收应答。
(4)从服务器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进程。
服务器一方的工作流程如下:
(1)打开通信信道(申请一个套接字),通知本地主机在某一保留端口接收客户机请求。
(2)等待客户机请求到达指定端口。
(3)接收到请求,启动一个新进程处理用户请求,同时释放旧进程以响应新的客户请求,一旦服务完成,关闭新进程与客户的通信链路。
(4);
(5)继续等待客户机请求。
(6)如果不想响应客户机请求,关闭服务器进程。
主要功能模块如下:
(1)发送
BOOLCUdpSock:
:
SendBuffer(char*buff,DWORDdwBufSize,structsockaddrFAR*lpTo)
{
();.){
~
TRACE("UdpDelWithResDataerro!
\n");
memset(&m_PackHead,0,sizeof(PackHead));
m_bFillHead=FALSE;
}
();
}
return;
}
<
一,注意有一个缓冲区m_SimpleIOBuffer主要用来保证每次收发的完整性。
然后就是c++异常机制,主要是为了稳定性。
二,在CUdpSock:
:
DelWithResData的处理部分,有很多保护措施。
这很重要。
然后从CUdpSock派生一个CSverUdpSock如下:
#include""
#include""
#include""
[
classCSverUdpSock:
publicCUdpSock
{
public:
virtualvoidClose();
intGetClientCount();
CClientUdpConnect*GetClient(structsockaddrFAR*lpFrom);
virtualvoidOnRead();
\
virtualvoidOnAccept(structsockaddrFAR*lpFrom);
virtualvoidShutDown(structsockaddrFAR*lpFrom);
virtualvoidShutDown(CClientUdpConnect*_pClient);
virtualvoidOnShutDown(structsockaddrFAR*lpFrom);
voidCloseAllClients();
CSverUdpSock();
virtual~CSverUdpSock();
CObListm_clients;
@
CObListm_willbedeleteclients;
CCriticalSectionm_lockFreeClients;
private:
virtualBOOLAccept(structsockaddrFAR*lpFrom);
BOOLIsAlreadyExit(structsockaddrFAR*lpFrom);
CCriticalSectionm_lockClients;
CEventm_timer;
protected:
voidAddDeathClient(CClientUdpConnect*_pClient);
voidFreeClients();
};
程序实现部分如下:
(1)客户端程序如下:
#include<>
#include<>
#pragmacomment(lib,"WS2_32")
算机网络课程设计.机械工业出版社,2007年12月
[2]张尧学﹑郭国强﹑王晓春﹑赵艳标.计算机网络与Internet教材(第二版).清华大学出版社,2006年11月
[3]UDP服务器设计过程总结中科设计园文章
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UDP 服务器 设计 课程设计