实验二实验报告.doc_第1页
实验二实验报告.doc_第2页
实验二实验报告.doc_第3页
实验二实验报告.doc_第4页
全文预览已结束

下载本文档

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

文档简介

网络程序设计实验报告 实验名称: UDP通信实验 实验类型: 验证型实验 指导教师:_XX老师(理论课:XX) 专业班级: XX0905班 姓 名:_ _ XXX_ _ 学 号:_XXXXXXX_ _ 电子邮件:_ XXXXXXXX _ 实验地点:_XXXXXXXX _ 实 验 日 期: 2012年X月X日 实验成绩:_ 1、 实验目的1. 进一步理解Winsock API的调用方法2. 了解UDP协议的工作原理3. 掌握UDP服务端程序和客户端程序的编写流程4. 熟悉程序的调试方法2、 实验设计2.1实验要求1. 认真理解数据报套接字编程模型,仔细阅读并调试运行UDPserve.cpp程序和UTPClient.cpp程序源代码,分析在服务端和客户端分别使用了哪些Winsock API函数,写入实验报告;2. 修改UDPServer和UDPClient程序,设计一个简单的UDP通信程序,并达到以下要求: 双方能相互发送数据,并显示接收到的数据。 当收到对方的数据为“bye”时,能退出程序。3. 编程验证实验思考题中问题。4. 选做,服务器同多个客户端通信。2.2实验设计1. 通过阅读和调试UDPServer.cpp程序源文件,了解到在服务端使用了socket函数创建一个无名的UDP类型的套接字,使用了htons函数将参数从主机字节顺序转化到TCP/IP网络字节顺序,使用bind函数将创建的无名套接字绑定到本地地址,使用了recvfrom函数来接受数据,使用inet_ntoa函数将32位的二进制数转化为了字符串。 阅读UDPClient.cpp程序源文件后,了解到在客户端使用了socket函数创建一个无名的UDP类型的套接字,使用了htons函数将参数从主机字节顺序转化到TCP/IP网络字节顺序,使用了inet_addr函数将字符串类型的IP地址转化为32为二进制数,使用sendto函数将数据发送到制定IP的服务器端。2. 为实现实验要求中的第二点,在UDPServer程序中进行修改,在接受数据后,对接受的数据进行判断,若是“bye”则向对方发送同样的数据,并推出程序,若不是“bye”,则接受用户输入的数据,并发送给通信对方。 在UDPClient程序中进行修改,在发送数据后,无限等待接受通信对方的数据,在接受数据后进行判断,其后的处理与服务器端相同。3. 实验证明,如果首先调用sendto函数,则可以不调用bind函数显示地绑定到本地地址,系统会自动地为程序绑定。4. 在UDPClient函数中,将原来的sendto函数换成connect和send函数后,程序功能仍然能够正常实现,说明可以使用connet函数实现通信。5. 可以在不调用sendto函数之前调用recvfom函数。6. 程序流程图如下: 图2.UDP编程中客户端的流程图图1.UDP编程中服务器端的流程图3、 实验过程(包含实验结果)1. 认真阅读源程序2. 针对实验要求设计代码3. 编写代码实现要求 图3.通信建立后,服务器端的程序界面4. 实验结果 图4.通信建立后,客户端的程序界面4、 讨论与分析1. 能否在接收数据之间不进行bind()调用?如果能,请说明可能的情况。 答:可以。如果首先调用sendto函数,则可以不调用bind函数显示地绑定到本地地址,系统会自动地为程序绑定。2. 能否使用connect()连接对方?为什么? 答:可以使用connect接连对方。如果希望为一个数据报套接字指定唯一的通信方时,可以使用connect来实现这一功能。需要注意的是,在数据报套接字上使用connect并不是建立连接,不存在“握手”的过程。仅仅是为这个套接字指定一个通信方,一旦指定了对方的地址,就可以通过send/recv来发送/接收数据了。而且可以在这个数据报套接字上多次调用connect函数来指定不同的通信方。3. 能否在不调用sendto()函数之前调用recvfom()函数。 答:实验证明可以在调用sendto函数之前调用recvform函数。当s已经被显示地绑定了本地地址后,调用recvfrom函数将默认在阻塞模式下进行,即将一直等待信息,直到成功接受到数据。5、 实验者自评通过本次实验,对基本的windsock API函数的使用方法和实现原理有了更深入的了解,对课本上的理论知识有了更好的巩固。在实验过程中,熟悉了网络编程方法,对自己的编程动手能力有了较好的锻炼和提高,在实验题目要求的过程中,遇到了一些困难,但通过查阅资料等方式,已经得到较好的解决,在这个过程中也锻炼了自己发现并解决问题的能力。通过本次实验,我发现自己的编程能力有所下降,也许是较长时间没有动手编程的原因,一些基本函数的应用也会出现错误,基础知识不够扎实,需要进一步的巩固,希望自己能对以后的实验都认真对待,多花时间进行编程练习,争取不断提高和进步。6、 附录:关键代码(给出适当注释,可读性高)当一方判断通信结束并退出程序前,应该通知对方也退出程序,具体实现方案为,当判定接受的字符串为“bye”时,向对方也发送“bye”,然后再退出程序。代码如下: if(nRecv 0)buffnRecv = 0;if ( !strcmp( buff, bye ) )strcpy(szText, bye);:sendto(s, szText, strlen(szText), 0, (sockaddr*)&addr, sizeof(addr);break;printf( 接收到数据(%s):%s, :inet_ntoa(addr.sin_addr), buff);在键入字符串时,scanf不能处理带有空格的字符串,可以换做使用gets函数,在gets函数前

温馨提示

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

评论

0/150

提交评论