实验二实验报告Word格式.doc
- 文档编号:13957723
- 上传时间:2022-10-15
- 格式:DOC
- 页数:4
- 大小:117.66KB
实验二实验报告Word格式.doc
《实验二实验报告Word格式.doc》由会员分享,可在线阅读,更多相关《实验二实验报告Word格式.doc(4页珍藏版)》请在冰豆网上搜索。
XX0905班
姓名:
________XXX_____
学号:
___________XXXXXXX______
电子邮件:
___XXXXXXXX@____
实验地点:
________XXXXXXXX__________
实验日期:
2012年X月X日
实验成绩:
__________________________
一、实验目的
1.进一步理解WinsockAPI的调用方法
2.了解UDP协议的工作原理
3.掌握UDP服务端程序和客户端程序的编写流程
4.熟悉程序的调试方法
二、实验设计
2.1实验要求
1.认真理解数据报套接字编程模型,仔细阅读并调试运行UDPserve.cpp程序和UTPClient.cpp程序源代码,分析在服务端和客户端分别使用了哪些WinsockAPI函数,写入实验报告;
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编程中服务器端的流程图
三、实验过程(包含实验结果)
1.认真阅读源程序
2.针对实验要求设计代码
3.编写代码实现要求
图3.通信建立后,服务器端的程序界面
4.实验结果
图4.通信建立后,客户端的程序界面
四、讨论与分析
1.能否在接收数据之间不进行bind()调用?
如果能,请说明可能的情况。
答:
可以。
如果首先调用sendto函数,则可以不调用bind函数显示地绑定到本地地址,系统会自动地为程序绑定。
2.能否使用connect()连接对方?
为什么?
可以使用connect接连对方。
如果希望为一个数据报套接字指定唯一的通信方时,可以使用connect来实现这一功能。
需要注意的是,在数据报套接字上使用connect并不是建立连接,不存在“握手”的过程。
仅仅是为这个套接字指定一个通信方,一旦指定了对方的地址,就可以通过send/recv来发送/接收数据了。
而且可以在这个数据报套接字上多次调用connect函数来指定不同的通信方。
3.能否在不调用sendto()函数之前调用recvfom()函数。
实验证明可以在调用sendto函数之前调用recvform函数。
当s已经被显示地绑定了本地地址后,调用recvfrom函数将默认在阻塞模式下进行,即将一直等待信息,直到成功接受到数据。
五、实验者自评
通过本次实验,对基本的windsockAPI函数的使用方法和实现原理有了更深入的了解,对课本上的理论知识有了更好的巩固。
在实验过程中,熟悉了网络编程方法,对自己的编程动手能力有了较好的锻炼和提高,在实验题目要求的过程中,遇到了一些困难,但通过查阅资料等方式,已经得到较好的解决,在这个过程中也锻炼了自己发现并解决问题的能力。
通过本次实验,我发现自己的编程能力有所下降,也许是较长时间没有动手编程的原因,一些基本函数的应用也会出现错误,基础知识不够扎实,需要进一步的巩固,希望自己能对以后的实验都认真对待,多花时间进行编程练习,争取不断提高和进步。
六、附录:
关键代码(给出适当注释,可读性高)
当一方判断通信结束并退出程序前,应该通知对方也退出程序,具体实现方案为,当判定接受的字符串为“bye”时,向对方也发送“bye”,然后再退出程序。
代码如下:
if(nRecv>
0)
{
buff[nRecv]='
\0'
;
if(!
strcmp(buff,"
bye"
))
{
strcpy(szText,"
);
:
:
sendto(s,szText,strlen(szText),0,(sockaddr*)&
addr,sizeof(addr));
break;
}
printf("
接收到数据(%s):
%s"
:
inet_ntoa(addr.sin_addr),buff);
}
在键入字符串时,scanf不能处理带有空格的字符串,可以换做使用gets函数,在gets函数前还应该加上getchar函数,以接受用户键入的换行符。
getchar();
gets(szText);
:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告