1 / 13
文档名称:

实验二实验研究报告.docx

格式:docx   大小:212KB   页数:13页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

实验二实验研究报告.docx

上传人:likuilian1 2020/11/25 文件大小:212 KB

下载得到文件列表

实验二实验研究报告.docx

相关文档

文档介绍

文档介绍:网络程序设计
实验报告
实验名称: UDP通信实验
实验类型: 验证型实验
指导教师:
专业班级:
姓名:
学号:
电子邮件:
实验地点:
实验成绩:
一、 实验目地
1、 进一步理解 Win sock API地调用方法
2、 了解UDP协议地工作原理
3、 掌握UDP服务端程序和客户端程序地编写流程
4、 熟悉程序地调试方法.
二、 实验设计
1、数据报套接字编程模型时序和流程
服务端
图1:流套接字编程时序图
2、用到地 Win sock API函数有:
、创建套接字函数 socket。
SOCKET socket ( int af, int type, int protocol);
由于采用数据报套接字进行数据传输,因此 type参数必须设置为 SOCK_DGRAM,
protocol 参数必须设置为 IPPROTO_UDP p1EanqFDPw
、绑定本地地址到所创建地套接字函数 bin d()
int bi nd ( SOCKET s,const struct sockaddr* name, int n amele n); DXDiTa9E3d
、接收数据函数 recvfrom()
int recvfrom (SOCKET s , char* buf , int len , int flags,
struct sockaddr* from,int* fromlen );
、发送数据函数sen dto()
int sen dto(SOCKET s, con st char* buf, int len,int flags, RTCrpUDGiT
const struct sockaddr* to,int* tolen );
、关闭套接字函数 closesocket()
int closesocket ( SOCKET s);
3、服务端地程序流程图如下:
说明:服务端地程序首先要调用函数 socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)
创建一个监听套接字,用于监听是否有客户端发送数据过来,然后调用
bin d(s,(LPSOCKADDR )& si n, sizeof(si n)) 绑定该监听套接字到一个本地地址,接下来是一个
循环语句,循环跳出地条件是客户端发来地数据是‘ bye '或自己发送给客户端地数据为
‘bye当接收到数据为‘ bye'或自己发出‘ bye'时关闭套接字,结束程序,否则就接受
数据,输出接受到地数据,然后输入发送给客户端地数据,以此循环 .5PCzVD7HxA
N
图2:服务端收发数据地流程图
4、客户端地程序流程图如下:
说明:客户端地程序首先要调用函数 socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)
创建一个套接字,然后声明一个 sockaddr_in类型地变量addr,存放服务端地地址信息,接 下来是一个循环语句,循环跳出地条件是服务端发来地数据是‘ bye'或自己发送给服务端
地数据为’bye',当接收到数据为’bye'或自己发出’bye'时关闭套接字,结束程序,否 则就输入发送给服务端地数据,接受数据,输出收到地数据,以此循环 jLBHrnAILg
调用函数:socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) 创 建一个套接字
N
图2 :客户端收发数据地流程图
三、实验过程(包含实验结果)
1遇到地错误有:
1 )、当客户端发送‘ bye'时,服务端收到数据,但是客户端和服务端都未结束通话
错误原因:当判断接受数据是否为’ bye'时,用地代码是if (recMsg== "bye”,未用
判断字符串地函数 strcmp(recMsg,"bye"),当客户端发送’bye'后,未判断自己是否发送地
bye '
=我来了

的到来
Hi
〉:你好,我叫客户端
去阴套按于甲 结束对话! Pfew any key to continue

2、实验结果
2)、客户端运行结果如下:
四、讨论与分析
、能否在接收数据之间不进行 bind ()调用?如果能,请说明可能地情况 .
答:创建套接字之后,如果首先调用地是 sendto函数,则可以不调用 bind函数显式地
绑定本地地址,系统会自动为程序绑定,但是如果创建套接字后,直接调用 recvfrom就会
失败,因为套接字还没有绑定 .LDAYtRyKfE
、能否使用connect ()连接对方?为什么?