计算机网络与通信课设报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

武汉理工大学《模拟电子技术》课程设计1.前言在计算机通信系统中,有两种通信方式:面向连接的TCP和面向报文的UDP。TCP:传输控制协议。TCP提供可靠交付的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复、并且按序到达。所以服务器和客户端的通讯使用TCP来完成。确保服务器作为“中转站”能够得到、存储、转发正确的客户信息。UDP:用户数据报协议。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。因为客户端之间的通讯(聊天)对数据正确性的要求不是太高,偶尔出错也不会有太大的影响。本课程设计则采用UDP方式来实现客户/服务器通信程序设计。UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。武汉理工大学《计算机网络与通信》课程设计说明书-1-2.设计要求2.1题目:基于UDP的客户/服务器通信程序设计2.2初始条件:操作系统:WindowsXP开发语言:C++2.3要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)服务器端功能:接收并显示客户发送的信息,显示该客户IP地址和端口号,并向该客户发送“Iamaserver.”的信息。客户端功能:向服务器发送“Iamaclient.”的信息,接收并显示从服务器收到的信息。3.原理分析3.1C++介绍C++是一种使用非常广泛的计算机编程语言,是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。优点:C++在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C++的集成开发环境中完成的。C++相对众多的面向对象的语言,具有相当高的性能。C++引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C++。缺点:C++由于语言本身过度复杂,这甚至使人类难于理解其语义。更为糟糕的是C++的编译系统受到C++的复杂性的影响,非常难于编写,即使能够使用的编译器也存在了大量的问题,这些问题大多难于被发现。由于本身的复杂性,复杂的C++程序的正确性相当难于保证。也有人提出不支持多线程的原语等缺陷。不过有如此多的知名人士提出了如此多的缺陷,正说明C++被广泛使用和成功。3.2UDP协议技术UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据武汉理工大学《计算机网络与通信》课程设计说明书-2-的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。3.3UDP和TCP协议的主要区别UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。3.4SOCKET简介Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。3.5Socket配置通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。面向连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。4.系统设计4.1编程中使用的函数4.1.1connect函数面向连接的客户程序使用Connect函数来配置socket并与远端服务器建立一个TCP连接,其函数原型为:intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen)4.1.2Send()和recv()函数Send()函数原型为:intsend(intsockfd,constvoid*msg,intlen,intflags);recv()函数原型为:intrecv(intsockfd,void*buf,intlen,unsignedintflags);武汉理工大学《计算机网络与通信》课程设计说明书-3-Send()和recv()这两个函数用于面向连接的socket上进行数据传输。4.1.3Sendto()和recvfrom()函数sendto()函数原型为:intsendto(intsockfd,constvoid*msg,intlen,unsignedintflags,conststructsockaddr*to,intRecvfrom()函数原型为:intrecvfrom(intsockfd,void*buf,intlen,unsignedintflags,structsockaddr*from,int*fromlen);4.1.4Bind函数Bind函数原型为:intbind(intsockfd,structsockaddr*my_addr,intaddrlen)。4.2设计思路4.2.1本设计中UDP通信采取C/S(客户机/服务器)模式。UDP客户/服务器通信程序与TCP不同,UDP在通信时并不要双方建立连接,服务器端与客户端程序设计基本一致。它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如以前聊天用的ICQ和OICQ就是使用的UDP协议。因此,本设计采用UDP连接方式。,程序编写步骤如下。4.2.2服务器端程序编写步骤:a)加载套接字库,创建套接字(WSAStartup()/socket());b)绑定套接字到一个IP地址和一个端口上(bind());c)将套接字设置为监听模式等待连接请求(listen());d)请求到来后,接受连接请求,发送和接收数据(sendto()/recvfrom());e)返回,等待另一连接请求;f)关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。4.2.3客户端程序编写步骤:a)加载套接字库,创建套接字(WSAStartup()/socket());b)绑定套接字到一个IP地址和一个端口上(bind());c)发送和接收数据(sendto()/recvfrom());d)关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。武汉理工大学《计算机网络与通信》课程设计说明书-4-4.3客户/服务器通信系统工作流程客户机一方的工作流程如下:(1)打开通信信道(申请一个套接字),并连接到服务器在主机的保留端口,该端口对应服务器的UDP进程。(2)向服务器发出请求报文,等待接收应答。(3)从服务器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进程。服务器一方的工作流程如下:1.打开通信信道(申请一个套接字),通知本地主机在某一保留端口接收客户机请求。2.等待客户机请求到达指定端口。3.接收到请求,启动一个新进程处理用户请求。4.继续等待客户机请求。Bind()Socket()Recvfrom()等待客户请求处理服务请求Sendto()Close()Socket()SizeofSendto()Recvfrom()Close()服务请求服务应答服务器客户机图4.1系统工作流程图武汉理工大学《计算机网络与通信》课程设计说明书-5-5.如果不想响应客户机请求,关闭服务器进程。5.系统程序流程图客户机的处理服务器的处理客户机循环服务器循环接收报文Recvfrom()、服务器循环客户机循环开始创建一个套接口socket()Ip地址和端口绑定Addrserver所输入的字符串发送命令sendto()其他接收/接收报文将接收到的报文在屏幕上输出关闭该套接口Closesocket()结束“quit”开始设置端口号创建一个套接口socket()Ip地址和端口绑定Addrserver对接收到的消息进行处理Chulicom();execute()发送命令的执行结果Sendto();关闭该套接口Closesocket()结束包包武汉理工大学《计算机网络与通信》课程设计说明书-6-6系统测试截图6.1启示状态截图图6.1初始状态截图6.2客户发送信息图6.2第一次对话截图6.3服务器返回信息武汉理工大学《计算机网络与通信》课程设计说明书-7-图6.3第二次对话截图6.4客户申请关闭对话图6.4手动关闭截图7心得与体会本次课程设计完成了基于UDP的客户/服务器通信程序设计。UDP是TCP/IP协议族为传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的、不可靠的协议。分析后知道了UDP其实就是用来实现网络中文件的传输和接收的协议。知道它的实质后,接下来我们就开始思考具体的UDP实现的程序,该程序分为客户端和服务器端两部分,客户端主要是执行文件或消息的发送,服务器端则主要是接收这些内容。整个程序最重要也是最有难度的部分就是如何把发送和接收两部分联系在一起,经过老师的悉心引导,我们终于攻克了这个难题,这样我们就把程序的功能充分的实现出来了。而且这次的课程设计过程中,我们接触到了winsock,使我们学到了新知识。通过这次的课程设计,我们掌握了UDP套接字的创建、绑定和关闭。UDP数据报的发送和接收方法。通过一周的努力,应该基本上完成了设计任务,成功地实现设计目标。武汉理工大学《计算机网络与通信》课程设计说明书-8-8.参考文献【1】杨祥金.杨丹.《Windows程序设计教程》[M].北京:清华大学出版社,2007【2】李峰,陈向益.《TCP\IP协议分析与应用编程》[M].北京:人民邮电出版社,2008【3】JamesF.Kurose,KeithW.Ross,陈鸣译.《计算机网络—自顶向下方法(第四版)》[M].北京:机械工业出版社,2009【4】LarryL.Peterson;BruceS.Davie,薛静锋译.计算机网络—系统方法(第四版)》[M].北京:机械工业出版社,2009.2【5】尹建璋.《计算机网络技术及应用实例》[M].西安:西安电子科技大学出版社,2008武汉理工大学《计算机网络与通信》课程设计说明书-9-附:客户端程序:#includewinsock2.h#includestdio.hvoidmain(){//加载套接字(winsock)库,加载这段代码拷贝于MSDN中WSAStartup的介绍WORDwVersionRequested;//typedefunsignedshortWORD;定义一个unsignedshort类型的变量WSADATAwsaData;//typedefstructWSAData定义一个WSADATA结构体interr;wVersionRequested=MAKEWORD(1,1);//版本号为1.1err=WSASt

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功