实验二实验报告Word格式文档下载.doc

上传人:wj 文档编号:5292481 上传时间:2023-05-04 格式:DOC 页数:4 大小:117.66KB
下载 相关 举报
实验二实验报告Word格式文档下载.doc_第1页
第1页 / 共4页
实验二实验报告Word格式文档下载.doc_第2页
第2页 / 共4页
实验二实验报告Word格式文档下载.doc_第3页
第3页 / 共4页
实验二实验报告Word格式文档下载.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验二实验报告Word格式文档下载.doc

《实验二实验报告Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《实验二实验报告Word格式文档下载.doc(4页珍藏版)》请在冰点文库上搜索。

实验二实验报告Word格式文档下载.doc

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);

:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2