网络程序设计实验报告p.docx

网络程序设计实验报告p.docx

ID:57713434

大小:18.91 KB

页数:8页

时间:2020-09-01

网络程序设计实验报告p.docx_第1页
网络程序设计实验报告p.docx_第2页
网络程序设计实验报告p.docx_第3页
网络程序设计实验报告p.docx_第4页
网络程序设计实验报告p.docx_第5页
资源描述:

《网络程序设计实验报告p.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、网络程序设计实验报告实验名称:___UDP通信实验_______实验类型:_____验证型实验指导教师:__________________专业班级:___________姓名:_______________学号:____电子邮件:_____实验地点:__实验成绩:__________________________一、实验目的?1、进一步理解WinsockAPI的调用方法?2、了解UDP协议的工作原理?3、掌握UDP服务端程序和客户端程序的编写流程?4、熟悉程序的调试方法。二、实验设计1、数据报套接字编程模型时序和流程客户端send

2、to()closesocket()recvfrom()closesocket()sendto()处理服务请求bind()recvfrom()bind()socket()服务端阻塞,等待客户连接请求服务请求服务应答socket()图1:流套接字编程时序图2、用到的WinsockAPI函数有:1)、创建套接字函数socket()SOCKETsocket(intaf,inttype,intprotocol);由于采用数据报套接字进行数据传输,因此type参数必须设置为SOCK_DGRAM,protocol参数必须设置为IPPROTO_UDP

3、2)、绑定本地地址到所创建的套接字函数bind()intbind(SOCKETs,conststructsockaddr*name,intnamelen);3)、接收数据函数recvfrom()intrecvfrom(SOCKETs,char*buf,intlen,intflags,structsockaddr*from,int*fromlen);4)、发送数据函数sendto()intsendto(SOCKETs,constchar*buf,intlen,intflags,conststructsockaddr*to,int*tol

4、en);5)、关闭套接字函数closesocket()intclosesocket(SOCKETs);3、服务端的程序流程图如下:说明:服务端的程序首先要调用函数socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)创建一个监听套接字,用于监听是否有客户端发送数据过来,然后调用bind(s,(LPSOCKADDR)&sin,sizeof(sin))绑定该监听套接字到一个本地地址,接下来是一个循环语句,循环跳出的条件是客户端发来的数据是‘bye’或自己发送给客户端的数据为‘bye’,当接收到数据为‘bye’或自己发

5、出‘bye’时关闭套接字,结束程序,否则就接受数据,输出接受到的数据,然后输入发送给客户端的数据,以此循环。图2:服务端收发数据的流程图4、客户端的程序流程图如下:说明:客户端的程序首先要调用函数socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)创建一个套接字,然后声明一个sockaddr_in类型的变量addr,存放服务端的地址信息,接下来是一个循环语句,循环跳出的条件是服务端发来的数据是‘bye’或自己发送给服务端的数据为‘bye’,当接收到数据为‘bye’或自己发出‘bye’时关闭套接字,结束程序,否则

6、就输入发送给服务端的数据,接受数据,输出收到的数据,以此循环。图2:客户端收发数据的流程图三、实验过程(包含实验结果)1、遇到的错误有:1)、当客户端发送‘bye’时,服务端收到数据,但是客户端和服务端都未结束通话错误原因:当判断接受数据是否为‘bye’时,用的代码是if(recMsg==”bye”),未用判断字符串的函数strcmp(recMsg,"bye"),当客户端发送‘bye’后,未判断自己是否发送的‘bye’导致客户端未退出。2、实验结果:1)、服务端运行结果如下:2)、客户端运行结果如下:四、讨论与分析1)、能否在接收数据

7、之间不进行bind()调用?如果能,请说明可能的情况。答:创建套接字之后,如果首先调用的是sendto函数,则可以不调用bind函数显式地绑定本地地址,系统会自动为程序绑定,但是如果创建套接字后,直接调用recvfrom就会失败,因为套接字还没有绑定。2)、能否使用connect()连接对方?为什么?答:UDP中可以使用connect系统调用,UDP中connect操作与TCP中connect操作有着本质区别,TCP中调用connect会引起三次握手,client与server建立连结,UDP中调用connect内核仅仅把对端ip和p

8、ort记录下来,UDP中可以多次调用connect,TCP只能调用一次connect。采用connect的UDP发送接受报文可以调用send,write和recv,read操作.当然也可以调用sendto,recvfro

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。