




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.前言在计算机通信系统中,有两种通信方式:面向连接的TCP和面向报文的UDP。TCP:传输控制协议。TCP提供可靠交付的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复、并且按序到达。所以服务器和客户端的通讯使用 TCP 来完 成。确保服务器作为“中转站”能够得到、存储、转发正确的客户信息。UDP:用户数据报协议。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用 UDP 协议。因为客户端之间的通讯(聊天)对数据正确性的要求不是太高,偶尔出错也不会有太大的影响。本课程设计则采用 UDP 方式来实现客户/服
2、务器通信程序设计。UDP 协议是英文User Datagram Protocol 的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多客户/ 服务器模式的网络应用都需要使用UDP 协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。2.设计要求2.1 题 目: 基于UDP的客户/服务器通信程序设计 2.2 初始条件:操作系统:Windows XP开发语言:C+2.3 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写
3、等具体要求)服务器端功能:接收并显示客户发送的信息,显示该客户IP地址和端口号,并向该客户发送“I am a server. ”的信息。客户端功能:向服务器发送“I am a client.”的信息,接收并显示从服务器收到的信息。3. 原理分析3.1 C+介绍C+是一种使用非常广泛的计算机编程语言,是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。优点:C+在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C+的集成开发环境中完成的。C+相对众多的面向对象的语言,具有相当高的
4、性能。 C+引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C+。 缺点:C+由于语言本身过度复杂,这甚至使人类难于理解其语义。更为糟糕的是C+的编译系统受到C+的复杂性的影响,非常难于编写,即使能够使用的编译器也存在了大量的问题,这些问题大多难于被发现。 由于本身的复杂性,复杂的C+程序的正确性相当难于保证。也有人提出不支持多线程的原语等缺陷。不过有如此多的知名人士提出了如此多的缺陷,正说明C+被广泛使用和成功。3.2 UDP协议技术UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单
5、地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。3.3 UDP 和TCP 协议的主要区别 UDP 和TCP 协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。 与TCP 不同,UDP 协议并不提供数据传送的保证机制。如果在从发送方到
6、接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP 协议称为不可靠的传输协议。3.4 SOCKET 简介Socket 接口是TCP/IP 网络的API,Socket 接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP 网络上的应用程序。要学Internet 上的TCP/IP 网络编程,必须理解Socket 接口。3.5 Socket 配置 通过socket 调用返回一个socket 描述符后,在使用socket 进行网络传输以前,必须配置该socket。面向连接的socket 客户端通过调用Connect 函数在socket 数据结构中保存本
7、地和远端信息。无连接socket 的客户端和服务端以及面向连接socket 的服务端通过调用bind 函数来配置本地信息。 4系统设计4.1 编程中使用的函数4.1.1 connect函数面向连接的客户程序使用Connect 函数来配置socket 并与远端服务器建立一个TCP 连接,其函数原型为:int connect(int sockfd, struct sockaddr *serv_addr,int addrlen)4.1.2 Send()和recv()函数Send()函数原型为: int send(int sockfd, const void *msg, int len, int fl
8、ags);recv()函数原型为: int recv(int sockfd,void *buf,int len,unsigned int flags);Send()和recv()这两个函数用于面向连接的socket 上进行数据传输。4.1.3 Sendto()和recvfrom()函数sendto()函数原型为:int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, intRecvfrom()函数原型为: int recvfrom(int sockfd,void *
9、buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);4.1.4 Bind 函数Bind 函数原型为: int bind(int sockfd,struct sockaddr *my_addr, int addrlen)。4.2 设计思路4.2.1 本设计中UDP通信采取 C/S(客户机/服务器)模式。UDP客户/服务器通信程序与TCP不同,UDP在通信时并不要双方建立连接,服务器端与客户端程序设计基本一致。它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用 UDP
10、较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。 比如以前聊天用的 ICQ 和 OICQ 就是使用的 UDP 协议。因此,本设计采用 UDP 连接方式。,程序编写步骤如下。 4.2.2服务器端程序编写步骤: a) 加载套接字库,创建套接字(WSAStartup()/socket(); b) 绑定套接字到一个 IP 地址和一个端口上(bind(); c) 将套接字设置为监听模式等待连接请求(listen(); d) 请求到来后, 接受连接请求,发送和接收数据(sendto()/recvfrom(); e) 返回,等待另一连接请求; f) 关闭套接字,关闭加载的套接字库(cl
11、osesocket()/WSACleanup()。4.2.3客户端程序编写步骤:a) 加载套接字库,创建套接字(WSAStartup()/socket(); b) 绑定套接字到一个 IP 地址和一个端口上(bind(); c) 发送和接收数据(sendto()/recvfrom(); d) 关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup()。4.3 客户/服务器通信系统工作流程 Bind()Socket()Recvfrom()等待客户请求处理服务请求Sendto()Close()Socket()SizeofSendto()Recvfrom()Close()服务
12、请求服务应答服务器客户机图4.1 系统工作流程图客户机一方的工作流程如下:(1) 打开通信信道(申请一个套接字),并连接到服务器在主机的保留端口,该端口对应服务器的UDP进程。(2) 向服务器发出请求报文,等待接收应答。(3) 从服务器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进程。服务器一方的工作流程如下:1. 打开通信信道(申请一个套接字),通知本地主机在某一保留端口接收客户机请求。2. 等待客户机请求到达指定端口。3. 接收到请求,启动一个新进程处理用户请求。4. 继续等待客户机请求。5. 如果不想响应客户机请求,关闭服务器进程。5系统程序流程图 客户机的处理 服务器的处理开
13、 始Ip地址和端口绑定Addrserver创建一个套接口socket()开 始设置端口号创建一个套接口socket()Ip地址和端口绑定Addrserver 客户机循环 服务器循环接收报文Recvfrom()其他发送命令sendto()所输入的字符串、“quit”包对接收到的消息进行处理Chulicom();execute()包发送命令的执行结果Sendto();将接收到的报文在屏幕上输出接收/接收报文 服务器循环结束结束关闭该套接口Closesocket()关闭该套接口Closesocket()客户机循环6 系统测试截图6.1 启示状态截图图6.1 初始状态截图6.2 客户发送信息图6.2
14、第一次对话截图6.3 服务器返回信息图6.3 第二次对话截图6.4 客户申请关闭对话图6.4 手动关闭截图7 心得与体会本次课程设计完成了基于UDP的客户/服务器通信程序设计。UDP是TCP/IP协议族为传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的、不可靠的协议。分析后知道了UDP其实就是用来实现网络中文件的传输和接收的协议。知道它的实质后,接下来我们就开始思考具体的UDP实现的程序,该程序分为客户端和服务器端两部分,客户端主要是执行文件或消息的发送,服务器端则主要是接收这些内容。整个程序最重要也是最有难度的部分就是如何把发送和接收两部分联系在
15、一起,经过老师的悉心引导,我们终于攻克了这个难题,这样我们就把程序的功能充分的实现出来了。而且这次的课程设计过程中,我们接触到了winsock,使我们学到了新知识。通过这次的课程设计,我们掌握了UDP套接字的创建、绑定和关闭。UDP数据报的发送和接收方法。通过一周的努力,应该基本上完成了设计任务,成功地实现设计目标。8参考文献【1】 杨祥金.杨丹. Windows程序设计教程M. 北京:清华大学出版社,2007【2】 李峰, 陈向益. TCPIP协议分析与应用编程M. 北京:人民邮电出版社, 2008【3】 James F.Kurose, Keith W.Ross, 陈鸣译. 计算机网络自顶向
16、下方法(第四版) M. 北京: 机械工业出版社, 2009【4】 Larry L. Peterson;Bruce S. Davie, 薛静锋译. 计算机网络系统方法(第四版) M.北京: 机械工业出版社, 2009.2 【5】 尹建璋计算机网络技术及应用实例M西安:西安电子科技大学出版社,2008附:客户端程序:#include winsock2.h#include stdio.h void main() /加载套接字(winsock)库,加载这段代码拷贝于MSDN中WSAStartup的介绍 WORD wVersionRequested;/typedef unsigned short WOR
17、D;定义一个unsigned short类型的变量 WSADATA wsaData;/typedef struct WSAData 定义一个WSADATA结构体 int err; wVersionRequested = MAKEWORD( 1, 1 ); /版本号为1.1 err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return; if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( ); re
18、turn; /创建套接字 SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0); /SOCK_DGRAM为UDP传输方式 /typedef u_int SOCKET; SOCKADDR_IN addrServer; /服务器地址结构 typedef struct sockaddr_in SOCKADDR_IN addrServer.sin_addr.S_un.S_addr=inet_addr(127.0.0.1); /服务器地址 addrServer.sin_family=AF_INET; addrServer.sin_port=htons(6000);
19、 /服务器端口号 char tempBuf1000; char recvBuf1000;/定义接收缓冲数组 char sendBuf1000;/定义发送缓冲数组 int len=sizeof(SOCKADDR);/求SOCKADDR长度 while(1) printf(plese input the message:n); gets(sendBuf); /得到用户的键盘输入 sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrServer,sizeof(SOCKADDR); int result=recvfrom(sock
20、Client,recvBuf,1000,0,(SOCKADDR*)&addrServer,&len); if(result=SOCKET_ERROR) int errCode=WSAGetLastError(); printf(error:%d,errCode); break; /退出循环 else if(recvBuf0=q) /对方请求退出 /同样将退出请求发送回去 sendto(sockClient,q,strlen(q)+1,0,(SOCKADDR*)&addrServer,sizeof(SOCKADDR); printf(the chat end!); for(int i=0;i65
21、536;i+) for(int j=0;j5000;j+); break; else /将对方发送过来的信息前段加上IP地址进行输出 / sprintf(tempBuf,massege from server aid:%s,recvBuf);sprintf(tempBuf,%s aid:%s,inet_ntoa(addrServer.sin_addr),recvBuf); printf(%sn,tempBuf); closesocket(sockClient); WSACleanup(); 服务器端程序:#include winsock2.h#include stdio.h void main
22、() /加载套接字(winsock)库,加载这段代码拷贝于MSDN中WSAStartup的介绍 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); /版本号为1.1 err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return; if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanu
23、p( ); return; /创建套接字 SOCKET sockServer=socket(AF_INET,SOCK_DGRAM,0); SOCKADDR_IN addrServer; /设置服务器端套接字的地址结构的相关属性 addrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY); /设置IP addrServer.sin_family=AF_INET; addrServer.sin_port=htons(6000); /设置端口号 /将套接字和服务器地址结构绑定 bind(sockServer,(SOCKADDR*)&addrServer,sizeof(SOCKADDR); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); char recvBuf100; char tempBuf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国6-氨基己酸数据监测报告
- 2025年中国15%甲硫.霉威悬浮剂数据监测报告
- 2025至2030年中国高效脱硫麻石水膜除尘器市场分析及竞争策略研究报告
- 2025至2030年中国门框滚压成型机市场分析及竞争策略研究报告
- 2025至2030年中国金属清洗兼防锈剂市场分析及竞争策略研究报告
- 2025至2030年中国视频资料服务管理系统市场分析及竞争策略研究报告
- 2025至2030年中国胶带输送自动调偏器市场分析及竞争策略研究报告
- 2025至2030年中国管道自动增压泵市场分析及竞争策略研究报告
- 2025至2030年中国白晶粉市场分析及竞争策略研究报告
- 2025至2030年中国浮雕双龙棍剑市场分析及竞争策略研究报告
- PSS的生产工艺及原理课件
- 2023-2024学年浙江省富阳市小学数学五年级下册期末自测试卷
- 防火墙安全策略检查表
- 研究借鉴晋江经验-加快县域经济发展
- GB/T 12706.4-2020额定电压1 kV(Um=1.2 kV)到35 kV(Um=40.5 kV)挤包绝缘电力电缆及附件第4部分:额定电压6 kV(Um=7.2 kV)到35 kV(Um=40.5 kV)电力电缆附件试验要求
- 2023年镇江丹阳市民政局系统事业单位招聘笔试模拟试题及答案
- 国开电大 操作系统 实验4:文件管理实验报告
- 北京理工附中小升初分班考试真题
- 安徽省小学学生学籍表
- 无创脑血氧监护仪技术审评报告
- 糖尿病足的诊断与治疗ppt课件
评论
0/150
提交评论