版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、安徽省巢湖学院计算机与信息工程学院课程设计报告课程名称: Windows网络编程 课题名称: 基于套接字的网络广播程序设计与实现 专业班级: 11网络工程 同组姓名: 白壮丽、刘国文、王凤娟、王艳楠 同组学号: 12035002、12035022、12035039、12035043 联系方式:白 壮 丽:137 3199 9702 指导教师:吴 其 林 17目 录一、实验目的1二、 实验内容与小组分工12.1开发背景;1 2.2功能要求;12.3、相关协议及原理;22.4、小组成员分工;2三、设计思路与步骤33.1、设备与环境;33.2、广播信息的发送端;33.3、广播信息的接收端;4四、 程
2、序代码44.1、头文件;44.2、发送端;54.3、接收端;6五、设计过程及详细程序分析75.1设计过程;75.2详细程序设计分析;7(1)、发送端程序设计分析:7(2)、接收端程序设计分析:10六、调试分析126.1正常发送和接受;126.2、发送端本地取消地址绑定:136.3、接收端未进行端口绑定;146.4、发送端未指定广播端口;156.5、修改程序保存调试时,未关闭原先所进行调试的窗口;16七、 总结17一、实验目的 用我们所学过的知识,以达到巩固所学知识,提高我们思考问题、分析问题和解决问题能力的目的。学会基于VC6.0 的程序开发的环境搭建与配置,并在实际运用中学习和掌握
3、VC程序开发的全过程。进一步熟悉掌握VC+程序设计语言的基础内容,如局域网络中的数据通信、基于Socket程序的设计等 进一步掌握TCP和UDP方式的网络编程模式。能运用Winsock提供的API函数接口进行网络编程的编写,理解广播程序的工作原理,利用数据报式套接字编写一个广播发送与接收程序,在局域网中实现广播。 通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力。二、 实验内容与小组分工2.1开发背景; 广播系统具有实用性、经济性、便捷性等特点,广泛应用于各种公共场合,如进行全校的公共广播、课间操、召开全校大会等。利用传统广播的概念,将其与网络连接起来,即可实现网络资源共享,典型的例子
4、如:网络教学。在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络, 基于VC6.0的局域网广播系统能更方便的在局域网中传递信息,因此产生了制作一个局域网的广播系统;而且通过制作该程序还能更好的学习网络软件编程知识.2.2功能要求; 利用数据报套接字建立一个广播发送与接收系统,该系统由两方程序组成:广播的发送端与广播的接收端,广播的发送端每隔1秒钟向网络中发送一条广播信息“This is Broadcast Test,而广播接收端循环接收来自发送端发来的消息并将其输出。2.3、相关协议及原理;用户数据报协议(UDP)是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单
5、不可靠信息传送服务。是一个简单的面向数据报的传输层协议,IETF RFC 768是UDP的正式规范。 UDP 协议基本上是 IP 协议与上层协议的接口。 UDP 协议适用端口分别运行在同一台设备上的多个应用程序。 由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用 UDP 的“端口号”完成的。例如,如果一个工作站希望在工作站 128.1.123.1 上使用域名服务系统,它就会给数据包一个目的地址 128.1.123.1 ,并在 UDP 头插入目标端口号 53 。源端口号标识了请求域名服务的
6、本地机的应用程序,同时需要将所有由目的站生成的响应包都指定到源主机的这个端口上。 2.4、小组成员分工;基于套接字的网络广播程序设计与实现学 号姓 名主 要 任 务12035002白壮丽详细程序设计分析、调试分析、总结12035039王凤娟设计思路与步骤12035022刘国文实验目的12035043王艳楠实验内容与小组分工小组负责人:白壮丽 联系电话、设计思路与步骤3.1、设备与环境;(1)连接到互联网上的PC机两台。(2)计算机硬件要求:Intel Pentium5 处理器、256MB以上内存、Ethernet网卡、网络若干。(3)计算机软件要求:MS window
7、s 9x/2000/xp操作系统,TCP/IP协议,Visual c+6.0/net系统。3.2、广播信息的发送端;(1)创建一个数据报套接字用于发送广播信息SOCKET s = socket(AF_INET,SOCK_DGRAM,0);(2)设置广播选项,是SO_BROADCAST选项有效BOOL bBroadcast = ture;Setsockopt(sBroadCast,SOL_BROADCAST,(char*)&bBroadCast,sizeof(BOOL);(3)设置广播地址及广播端口号,这时的接收地址应该设为地址INADDR_BROADCASTSOCKETADDR_IN
8、bcast;Bcast.sin_addr.s_addr=INADDR_BROADCAST;/:inet_addr(“255.255.255.255”);(4)发送广播,调用sendto函数发送广播,可如下程序所示:Cout sz = “This is just a test.rn”;While (TURE) sendto(s,sz,strlen(sz),0,(sockaddr*)&bcast,sizeof(bcast);Sleep(5000); (5)关闭套接字Closesocket(s);3.3、广播信息的接收端;(1)创建一个数据报套接字用于接收广播信息(2)绑定一个本地地址,指明
9、广播端口号(要和发送方设置端口号的相同)作为接收端口。(3)接收广播,调用recvform函数接收广播:Cout<< “开始接收广播数据nn”;SOCKADDR_IN addrRemote;Int nLen = sizeof(addrRemote);Char sz256;While(TURE) int nRet = : : recvform(s,sz,256,0,(sockaddr*)&addrRemote,&nLen);if(nRet > 0) sznRet = 0;Cout<<sz; (4)程序结束前,关闭套接字Closesocket(s);4
10、、 程序代码4.1、头文件;#ifndef _INITSOCK#define _INITSOCK#include"iostream.h"#include"conio.h"#include"winsock2.h"#pragma comment(lib,"ws2_32.lib")class CInitSockpublic:CInitSock() WSAData wsaData; if(WSAStartup(0x0202,&wsaData)!=0) cout<<"Winsock 系统初始化失
11、败!n" exit(1); cout<<"Winsock 系统初始化成功!n" CInitSock() WSACleanup(); ;#endif4.2、发送端;#include "InitSock.h"#define PORT 2000#include<stdio.h>CInitSock initsock;void main()SOCKET s = socket(AF_INET,SOCK_DGRAM,0);if(s = INVALID_SOCKET)printf("Create Socket Failed!n
12、");return;printf("Create Socket Ok!n");BOOL bBroadcast = 1;setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char*)&bBroadcast,sizeof(BOOL);SOCKADDR_IN bcast;bcast.sin_family = AF_INET;bcast.sin_port = htons(0);bcast.sin_addr.S_un.S_addr = htonl(INADDR_ANY);bind(s,(sockaddr*)&bcast,sizeof
13、(bcast);SOCKADDR_IN broadcast;broadcast.sin_family = AF_INET;broadcast.sin_port = htons(PORT);broadcast.sin_addr.S_un.S_addr = htonl(INADDR_BROADCAST);printf("Begin to send broadcast!n");char sz = "This is just a test.rn"while(1) sendto(s,sz,strlen(sz),0,(sockaddr*)&broadcast
14、,sizeof(broadcast);Sleep(5000);printf("发送端发送""%sn",sz)closesocket(s);getch();4.3、接收端;#include "InitSock.h"#define PORT 2000CInitSock initsock;#include<stdio.h>void main()int ret;SOCKET s = socket(AF_INET,SOCK_DGRAM,0);if(s = INVALID_SOCKET)printf("Create Sock
15、et Failed!n");return;printf("Create Socket Ok!n");sockaddr_in Recvaddr;Recvaddr.sin_family = AF_INET;Recvaddr.sin_port = htons(PORT);Recvaddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);bind(s,(sockaddr*)&Recvaddr,sizeof(Recvaddr);printf("Begin to receive broadcast!n");SOCK
16、ADDR_IN addrRemote;int nlen=sizeof(addrRemote);char sz256;while(true)ret=recvfrom(s,sz,256,0,(sockaddr*)&addrRemote,&nlen);if(ret>0)szret='0'printf("接收端接收""%sn",sz);closesocket(s);printf("Press any key to exit: ");getch();五、设计过程及详细程序分析5.1设计过程; 广播是指在一个
17、局域网中向所有的网上节点发送信息。这是udp连接的一种。 广播有一个广播组,即只有一个广播组内的节点才能收到发往这个广播组的信息。什么决定了一个广播组呢,就是端口号,局域网内一个节点,如果设置了广播属性并监听了端口号A后,那么他就加入了A组广播,这个局域网内所有发往广播端口A的信息他都收的到。在广播的实现中,如果一个节点想接受A组广播信息,那么就要先将他绑定给地址和端口A,然后设置这个socket的属性为广播属性。如果一个节点不想接受广播信息,而只想发送广播信息,那么不用绑定端口,只需要先为socket设置广播属性后,向广播地址INADDR_BROADCAST的A端口发送udp信息即可。 数据
18、包套接字(SOCK_DGRAM):数据包套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据包套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。整个程序的设计模块中主要分为两个方面,一方面是接受端:主要是接受来发送端发送过来的消息,另一端是发送端:主要是定时向网络中发送一条广播消息。5.2详细程序设计分析;(1)、发送端程序设计分析:a、首先是在发送端设置一个端口,用于发送消息。
19、我们在这具体定义为2000端口:#define PORT 2000对Winsock系统进行初始化,并判断、输出是否成功。SOCKET s = socket(AF_INET,SOCK_DGRAM,0);if(s = INVALID_SOCKET)printf("Create Socket Failed!n");return;printf("Create Socket Ok!n");b、我们可以用使用setsocket函数设置套接字选项,设置广播选项的具体级别与选项名称分别为:SOL_SOCKET、SO_BROADCAST。例如可以如下设置一个套接字sBro
20、adCast的广播选项。BOOL bBroadcast = ture;Setsockopt(sBroadCast,SOL_BROADCAST,(char*)&bBroadCast,sizeof(BOOL);c、对于setsockopt()函数解析:函数功能:设置套接字的选项以设定套接字的功能。函数原型:Int setsockopt ( SOCKET s, int level, int optname const char * optval, int optlen);参数说明: s:标识一个套接口的描述字。 level:选项定义的
21、层次;目前仅支持SOL_SOCKET和IPPROTO_TCP层次。 optname:需设置的选项。 optval:指针,指向存放选项值的缓冲区。 optlen:optval缓冲区的长度。返回值:成功是返回0,失败时返回SOCKET_ERROR。d、定义发送端地址:如果应用程序不关心给它的本地地址,则可以将地址设为ADDR_ANY,这就允许底层服务提供者使用任何适当的网络地址。对于TCP/IP而言,端口可以指定为0,此事服务提供者会为程序分配10245000之间的唯一端口。SOCKADDR_IN bcast;bcast.si
22、n_family = AF_INET;bcast.sin_port = htons(0);bcast.sin_addr.S_un.S_addr = htonl(INADDR_ANY);e、绑定函数,bind()函数功能:讲套接字与本地地址绑定(注意是本地地址)函数原型:int bind(SOCKET s, const struct sockaddr* name, int namelen);参数说明:s:一个带绑定套接字句柄; name:待赋予套接字的本地地址: namelen:套接字地址变量占用的空间字节数。返回值:成功是返回0,失败时返回-1(SOCKET_ERROR)。f、设置发送方的广播
23、端口;并打印“Begin to send broadcast!”SOCKADDR_IN broadcast;broadcast.sin_family = AF_INET;broadcast.sin_port = htons(PORT);broadcast.sin_addr.S_un.S_addr = htonl(INADDR_BROADCAST);printf("Begin to send broadcast!n");g、设置发送池内容,并定期发送;Sendto()函数;函数功能:发送一个数据报到指定端口 函数原型:sendto( SOCKET s, char * buf,
24、 int len, int flags,struct sockaddr* to, int tolen); 参数说明: s:一个标识套接口的描述字。 buf:包含待发送数据的缓冲区。 len:buf缓冲区中数据的长度。 flags:调用方式标志位。 to:(可选)指针,指向目的套接口的地址。tolen:to所指地址的长度。char sz = "This is just a test!n"while(1)sendto(s,sz,strlen(sz),0,(sockaddr*)&broadcast,sizeof(broadcast);Sleep(5000);Printf(
25、“发送端发送”%sn”,sz);h、关闭套接字S;closesocket(s);(2)、接收端程序设计分析:a、首先是在发送端设置一个端口并对Winsock系统进行初始化;#define PORT 2000SOCKET s = socket(AF_INET,SOCK_DGRAM,0);if(s = INVALID_SOCKET)printf("Create Socket Failed!n"); return;printf("Create Socket Ok!n");b、设置接受方的广播端口;并打印“Begin to receive broadcast!”
26、c、绑定函数,bind();函数功能:讲套接字与本地地址绑定(注意是本地地址)函数原型:int bind(SOCKET s, const struct sockaddr* name, int namelen);参数说明:s:一个带绑定套接字句柄; name:待赋予套接字的本地地址: namelen:套接字地址变量占用的空间字节数。返回值:成功是返回0,失败时返回-1(SOCKET_ERROR)。sockaddr_in Recvaddr;Recvaddr.sin_family = AF_INET;Recvaddr.sin_port = htons(PORT);Recvaddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);bind(s,(sockaddr*)&Recvaddr,sizeof(Recvaddr);printf("Begin to receive broadcast!n");e、判断接收,当接收到发送方发送的消息时,打印出来接受内容;while(true)ret=recvfrom(s,sz,256,0,(sockaddr*)&addrRemote,&nlen);if(ret>0)szret='0'pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《深圳大学图书馆》课件
- 《电子服务概论》课件
- 2024届安徽省部分学校高三上学期期末考试历史试题(解析版)
- 2024年辽宁轻工职业学院单招职业技能测试题库完整答案
- 单位管理制度集粹选集【人事管理篇】十篇
- 单位管理制度汇编大全【员工管理篇】
- 单位管理制度合并选集职工管理篇
- 《法国雪铁龙公园》课件
- 单位管理制度分享合集【职工管理篇】
- 单位管理制度呈现大全【职工管理】十篇
- 铁路行车规章
- 污水处理厂有毒有害气体检测记录表
- 马克思主义与社会科学方法论课后思考题答案全
- 针灸推拿习题库+参考答案
- 血液科侵袭性真菌的治疗
- 浅析岩溶地区工程地质勘察手段及应用
- 2023-2024学年六年级上期末数学考试试卷附答案解析
- 罗伊模式个案护理
- 公益性岗位开发申请审批表
- 中国马克思主义与当代知到章节答案智慧树2023年西安交通大学
- 组织协同运用平衡计分卡创造企业合力
评论
0/150
提交评论