网络程序设计实验报告-UDP通信实验_第1页
网络程序设计实验报告-UDP通信实验_第2页
网络程序设计实验报告-UDP通信实验_第3页
网络程序设计实验报告-UDP通信实验_第4页
网络程序设计实验报告-UDP通信实验_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、网络程序设计实验报告实验名称:udp通信实验实验类型:验证型实验指导教师:专业班级:姓 名:学 号:电子邮件:实验地点:实验日期 2013 年 3丿j 29丨i实验成绩:一、实验目的 进一步理解winsock api的调用方法 了解udp i办议的工作原理掌握udp服务端程序和客户端程序的编写流程 熟悉程序的调试方法。二、实验设计根据实验要求如21. 认真理解数据报套接字编程模型,仔细阅读并调试运行udpsewe.cpp程序和 utpclient.cpp程序源代码,分析在服务端和客户端分别使用了哪些winsock api函数, 写入实验报告;2. 修改udpserver和udpclicnt程序

2、,设计一个简单的udp通信程序,并达到以下要求: 双方能相互发送数据,并显示接收到的数据。 当收到对方的数据为“bye”时,能退出程序。3. 编程验证实验思考题中问题。选做,服务器同多个客户端通信1首先需要了解一些关于udp的相关函数 数据报套接字编程使用的函数1) 创建套接字函数socket ()socket socket (int af, int type, int protocol);由于采用数据报套接字进行数据传输,因此type参数必须设置为sock_dgram, protocol参数必须设置为ipproto_udp2) 绑定本地地址到所创建的套接字前数bind()int bind (

3、socket s, const struct sockaddr* name, int namelen);在实际编程时可以省略该函数,系统会自动绑定3) 接收数据函数recvfromoint recvfrom (socket s, char* buf, int len, int flags,struct sockaddr* from, int* fromlen);4) 发送数据函数sendtooint sendto(socket s, const char* buf, int len, int flags,const struct sockaddr* to, int* tolen);5) 关闭套

4、接字函数closesocket ()int closesocket (socket s);这些是编写程序时候需要用到的,之后是关于设置通信的流程图左边的流程图是服务端的流程图,右边的是客户端的流程图2.然后根据流程图编g程序函数startsendmessagereceivemessagereceive messagereceive messageover三、实验过程i.实验结果下图为程序运行的时候客户端u的界面实验结果卜图为程序运行的时候服务端口的界而* h:wi ndov/s«sat+utyuyytu$2udpserver(mseruei* start接收到数据(127.0.0.1

5、) : tcp server dcno?input message: erguasd接收到数据(127.0.0.1) : bafdkadhgitalkshfukainput message: hello接收到裁据(127.0.0.1) : nyinput message: ny nane接收到数据(127.0.0.1) : naneinput message: 接收到数据(127.b.0.1) : is input message: dfgszdfgbdfsg接收到数据(127.0.0.1) : liuruixueinput message: fdgusdfvgbclient start接收到

6、数据(127.0.0.1) : erguasdinput message: bafdkadhgnaikshfuka接收到数据(127.0.0.1) : hello linput ma&sage: ny name i& liumiixue |接收到数据(127.0.01) ny喙g (127.0.0.1):数居(127.0.0.1) : dfgszdfgbdfsj 数据(127.0.0.1):input input input inputmessage: message: message: message:namefdgusdfugb四、讨论与分析 能否在接收数据z间不进行bin

7、d ()调用?如果能,请说明可能的情况。能否使用connect ()连接对方?为什么? 能否在不调用sendto()i|数之前调用recvfom()函数 答:可以。如果首先调用sendto函数,则可以不调用bind函数显示地绑定到木地地 址,系统会自动地为程序绑定。 答:可以使用connect接连对方。如果希望为一个数据报套接字指定唯一的通信方吋, 可以使用connect來实现这一功能。需要注意的是,在数据报套接了上使用connect并 不是建立连接,不存在“握手”的过程。仅仅是为这个套接字指定一个通信方,一旦指 定了对方的地址,就可以通过send/wcv来发送/接收数据了。而且可以在这个数据

8、报套 接字上多次调用connect函数来指定不同的通信方。 答:实验证明可以在调用sendto函数z前调用reevform函数。当s已经被显示地绑 定了本地地址后,调用reevfrom函数将默认在阻塞模式下进行,即将一直等待信息, 直到成功接受到数据。五、实验者自评实验的设计过程是根据实验指导书的流程來做的,设计过程要考虑诸多的因素,需要全 方位考虑函数的编写,因为这次要涉及两个程序的编写,先了解实验的要求,然后熟悉相应 的函数知识,设计函数流程图,z后根据流程图进行编码的编写,其中运川了一些套接字的 相关知识,实验过后,我对基本的windsock api函数的使用方法和实现原理有了更深入的

9、了解,对课本上的理论知识有了更好的巩固。在实验过程中,熟悉了网络编程方法,对自己 的编程动手能力有了较好的锻炼和提高,实验的最后检测,也提高了我实践的能力,很感谢 这次的实验让我了解了通信的和互关系,终于知道了所谓的qq的通信原理是怎么冋事,也 对这方面产生了浓厚的兴趣,但是自己编程能力还是有一点点差的啦,争取以后好好学习关 于通信这方面的知识,好好熟读课本,将知识内化为自己的一部分,运用到实践屮去!六、附录:关键代码client 端口/创建套节字socket s = :socket(af_inet, sock_dgram, ipproto.udp); if(s = invalid.socke

10、t)printf("failed socket() %d n",:wsagetlasterror(); return 0;也可以在这里调用bind函数绑定一个本地地址/否则系统将会自动安排/填写远程地址信息sockaddr_in addr;addr.sin_family = af_inet;add 匸 sin_poil = htons(4567);/注意,这里要填写服务器程序所在机器的ip地址/如果你的计算机没有联网,直接使用127.0.0.1即可addr.sin_addr.s_un.s_addr = inet_addr(" 127.0.0.1 °);/

11、发送数据printf(m client startn,f);char sztext = ” tcp server demo! rn":sendto(s, sztext, strlen(sztext), 0, (sockaddr*)&addr, sizeof(addr);/接收数据char buff1024;int nlen = sizeof(addr);while(true)int nrecv = :recvfrom(s, buff, 1024, 0, (sockaddr*)&addr, &nlen);if(nrccv > 0)buffnrecv = w;printfc* 接收到数据(%s): %s' :inet_ntoa(addr.sin_addr), buff);char sendmsgfl 00()1;printf(hninput message:");scanf(h%s,sendmsg);sen

温馨提示

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

评论

0/150

提交评论