基于UDP传输协议的应用程序开发实验--邓荣飞--工程硕士.doc_第1页
基于UDP传输协议的应用程序开发实验--邓荣飞--工程硕士.doc_第2页
基于UDP传输协议的应用程序开发实验--邓荣飞--工程硕士.doc_第3页
基于UDP传输协议的应用程序开发实验--邓荣飞--工程硕士.doc_第4页
基于UDP传输协议的应用程序开发实验--邓荣飞--工程硕士.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深 圳 大 学 实 验 报 告 课程名称: 网络工程 实验项目名称: UDP传输协议的应用程序开发实验 学院: 计算机与软件学院 专业: 计算机科学与技术 指导教师: 报告人: 邓荣飞 班级: 工程硕士2011 实验时间: 2011年12月07日 实验报告提交时间: 2011年1月8日 教务处制基于UDP的应用程序开发实验1、 TCP/IP协议族 链路层TCP/IP协议族的最低层,也称为网络接口层,通常包含操作系统中的设备驱动程序和对应的网络接口卡,对应于OSI参考模型中的数据链路层和物理层。负责接收网络层的IP数据报并通过网络发送到网络传输介质上,或者从网络上接收物理帧,抽出IP数据报,交给网络层。TCP/IP协议族并没有具体定义链路层,只要是在其上能进行IP数据报传递的物理网络都可以作为TCP/IP中的链路层,如以太网、令牌网等。这样使得TCP/IP在数据链路层的选择上有较大的灵活性。网络层也称为互联网层,由于该层的主要协议为IP,通常也简称为IP层。该层主要负责相邻计算机之间的通信,把某主机(信源)上的数据包发送到因特网中的任何一台目标主机(信宿)上,即点到点通信。其包括三方面功能。p 处理来自传输层的数据报发送请求p 处理输入数据报p 处理路径、流控、拥塞等问题。网络层协议包括IP(网际协议)、ICMP(因特网控制报文协议)和IGMP(因特网组管理协议)。传输层通常所说的两台计算机之间的通信其实是指两台计算机上对应的应用程序之间的数据通信,传输层提供的就是应用程序间的通信,一般也称为端到端的通信。其功能包括:p 格式化信息流;p 提供可靠传输。应用层应用层向用户提供一组常用的应用程序,主要包括超文本传输协议(HTTP),简单网络管理协议(SNMP),文件传输协议(FTP),简单邮件传输协议(SMTP),域名系统(DNS),远程登录协议(Telnet)等。尽管应用层为用户提供的协议较多,但是其只能满足用户的一般需求。2、 TCP/IP的工作过程网络应用程序一般是以客户机/服务器模型(Client/Server,C/S)工作。客户机和服务器是指一次通信中的两个应用程序。1.主动发起联系的一方称为客户机程序,它为用户提供向网络请求服务的接口;2.而被动等待联系的一方称为服务器程序,它负责接受用户的服务请求,提供资源共享,而且可以同时满足多个客户机的需求。3.客户机是服务请求方,服务器是服务提供方。客户机/服务器模型的工作模型3、 UDP传输原理和套接字介绍UDP为用户数据协议的简称(User Datagram Protocol,UDP)是传输层的两个主要协议之一,相对TCP来说,UDP是一种非常简单的协议,在网络层的基础上实现了应用进程之间端到端的通信。UDP提供的是一种无连接的、不可靠的数据传输方式,在数据传输过程中没有流量控制和确认机制,数据报可能会丢失、延迟、乱序到达信宿。UDP只是提供了利用校验和检查数据完整性的简单差错控制,属于一种尽力而为的数据传输方式。UDP主要特征:1. UDP是一个无连接协议,传输数据之前信源和信宿不建立连接,因此不存在连接建立的时延。在信源端,UDP传送数据的速度仅仅受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在信宿端,UDP把每个数据报放在队列中,应用程序每次从队列中读一个数据报。 2. 不需要维护连接状态,包括收发状态等,这样一台服务机可同时向多个客户机传输相同的数据,如实现多播。3. UDP数据报的首部很短,只有8字节,相对于TCP的20字节首部的开销要小很多。4. 吞吐量不受流量控制算法的调节,只受应用软件生成数据的速率、传输带宽、信源和信宿主机性能的限制。UDP数据报格式和封装:1. UDP数据报的格式*源端口号,即运行在信源机的应用进程所使用的端口号。*目的端口号,即运行在信宿机的应用进程所使用的端口号。*数据报总长度,定义了用户数据报的总长度,即UDP数据报的首部和数据的长度和。*校验和,用于检验整个用户数据报的差错。2. UDP数据报的封装套接字概念:1. 在网络中要全局地标识一个参与通信的进程,需要采用三元组:协议、主机IP地址、端口号。2. 要描述两个应用进程之间的端到端的通信关联则需要一个五元组:协议、信源机IP地址、信源应用进程端口、信宿机IP地址、信宿应用进程端口。3. 套接字可以理解为通信连接的一端,其主要包括协议、主机IP地址和端口号。4. 将两个套接字连接到一起便可以在不同应用进程之间传递数据5. 套接字实现了对网络和传输层协议的封装,为应用进程之间的通信连接的建立、数据传输等通信过程提供了编程界面。4、 实验的内容和基本要求在Windows系统环境下,利用微软提供的WinSock API函数来开发一套工具,实现UDP多台机器之间的数据传输。基本要求: 1.实现两台或者多台机器上的数据传输 2.软件实现数据的简单校验 3.有良好的操作界面5、 分析和实验根据UDP传输原理,是一个无连接的,不可靠的数据传输方式。因此在网络编程当中不需要在客户机和服务器之间事先建立连接,通信的任何一方可以先发送数据,这样先发送的一方便成了客户机,而接受数据的一方便是服务器方。在数据传输完成后,只要关闭套接字,释放网络资源,通信过程就结束。无连接的数据报传输过程中,由于不需要事先连接,因此在发送数据时,发送方除了需要指定本地套接字的地址外,还需要指定接收方的套接字地址,即在数据收发过程中动态建立通信双方的通信连接。下面为无连接的客户机/服务器程序工作模型,也为UDP应用编程的模型: 由于UDP协议传输不对传输的数据进行校验,为了保证数据传输的正确性,我们必须在接收方用软件的方式去实现校验。在发送数据端对发送数据计算长度并嵌入到发送数据缓存的最后一位,跟随数据一起发送出去,接受数据端对数据进行的长度重新计算并和接受数据的最后一位相比较,通过这样的方式进行简单的数据校验。6、 实验步骤设计1.实现两台或者多台机器上的数据传输:利用winsoct开发工具设计客户端和服务器端,采用UDP套接字方式来实现网络中的数据传输。利用现有的函数类调用实现数据的发送和接受;2. 软件实现数据的校验:采用发送数据端对发送数据计算长度并嵌入到发送数据缓存的最后一位,跟随数据一起发送出去,接受数据端对数据进行的长度重新计算并和接受数据的最后一位相比较,通过这样的方式进行简单的数据校验;7、 测试和结论 主机:strlen(recv_buf)7表示:当前接收到的字符串长度为7(发送的字符串加一位校验码);recv_bufstrlen(recv_buf)-16表示:所接收的到的实际有效数据长度为6;客户端:strlen(send_buf)6表示:当前发送的有效数据的字符串长度为6;strlen(send_buf)7表示:加校验位之后的发送缓存长度为7,有效数据6位,校验位为1位;send_bufstrlen(send_buf)-16表示:校验位的数值为6,即有效数据的字符串长度;从上面的途中那个可以看到,recv_bufstrlen(recv_buf)-1= strlen(recv_buf)-1= strlen(send_buf)说明发送的数据正确的发送和接收到了,程序实现了对接收的数据进行简单的校验工作。下面是测试结果:8、 实验总结通过本次的实验,使我了解了UDP协议的基本知识和数据传输中其所具有的特性。学习了如何去获取在程序设计当中遇到了很多问题,每次都在网上不停的寻找答案,但很多原理就在书上。学习应该明白其原理,不能只为实现其功能而去写程序。程序设计中简单数据校验和奇偶校验是应用比较广泛的一种传输数据校验方式,在这次实验中学习了其基本的原理,校验码的生成,和接收端数据的验证方法。在老师的细心教导下,通过课程的学习和实验,了解了TCP/IP协议,路由协议,多播协议等的基本原理和编程方法,感谢老师的教导和帮助。9、 程序清单/ UDP.cpp : Defines the entry point for the console application./#include stdafx.h#include #include using namespace std;#include #pragma comment(lib, ws2_32.lib)int main(int argc, char* argv)const int DEFAULT_PORT = 5050;const int DATA_BUFFER_LENGHT = 1024;SOCKET locatesocket;SOCKADDR_IN locateAddr,remoteAddr;/本地和远程主机地址int locatePort,remotePort; /本地和远程套接字端口号int err;int iLen,iSend,iRecv;/远程端地址长度,发送数据长度,接收数据长度/char apply_Message = message from Client!n; /请求连接信息/发送数据缓冲区,接收数据缓冲区char send_bufDATA_BUFFER_LENGHT=0,recv_bufDATA_BUFFER_LENGHT=0;bool clientFlag = false ; /客户端标志,即请求方WORD wVersionRequested;WSADATA wsaData;/根据参数设置相应的套接字参数if (argc 4) coutThis is a server program: udph 端口号endl;coutServer waitingendl;if (argc 2)locatePort = DEFAULT_PORT;elselocatePort = atoi(argv1);elselocatePort = atoi(argv1);remotePort = atoi(argv3);remoteAddr.sin_family = AF_INET;remoteAddr.sin_port = htons(remotePort);remoteAddr.sin_addr.S_un.S_addr = inet_addr(argv2);clientFlag = true;coutThis is an client program: udpc 端口号 Server IP 端口号endl;/加载Winsocket动态库wVersionRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) coutFailed to load Winsock.n;return 0; /创建本地套接字locatesocket = socket(AF_INET,SOCK_DGRAM,0);if (locatesocket = INVALID_SOCKET)coutsocket() Failed:GetLastError()endl;return 0;/设置本地套接字相关参数locateAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);locateAddr.sin_family = AF_INET;locateAddr.sin_port = htons(locatePort);err = bind(locatesocket,(SOCKADDR*)&locateAddr,sizeof(SOCKADDR);if (err != 0)coutbind() Failed:GetLastError()send_buf;/* 发送数据和校验字节 */coutstrlen(send_buf)strlen(send_buf)endl; send_bufstrlen(send_buf)=(char)strlen(send_buf);coutstrlen(send_buf)strlen(send_buf)endl;coutsend_bufstrlen(send_buf)-1(int)send_bufstrlen(send_buf)-1endl;iSend = sendto(locatesocket,send_buf,strlen(send_buf)+1,0,(SOCKADDR *)&remoteAddr,sizeof(remoteAddr);if (iSend = SOCKET_ERROR)coutsendto() Failed:GetLastError() 0)send_bufstrlen(send_buf)-1= ;coutMessage:send_buf have sent to inet_ntoa(remoteAddr.sin_addr):ntohs(remoteAddr.sin_port)endl;/循环处理双方数据传输while (1)iRecv = recvfrom(locatesocket,recv_buf,DATA_BUFFER_LENGHT,0,(SOCKADDR*)&remoteAddr,&iLen);if (iRecv = SOCKET_ERROR)coutrecvfrom() Failed:GetLastError() 0)/* 进行数据校验 */err = (recv_bufstrlen(recv_buf)-1=(strlen(recv_buf)-1);coutstrlen(recv_buf)strlen(recv_buf)endl;coutrecv_bufstrlen(recv_buf)-1(int)recv_bufstrlen(recv_buf)-1endl; if (err=0)/ 如果校验错误coutReceive:recv_bufendl;coutReceive info error.endl; continue;/ 返回1表示校验错误 else / recv_bufstrlen(recv_buf)=/0; recv_bufstrlen(recv_buf)-1= ;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论