基于套接字的广播



《基于套接字的广播》由会员分享,可在线阅读,更多相关《基于套接字的广播(19页珍藏版)》请在文档大全上搜索。
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的程序开发的环境搭建与配置,并在实际运用中学习和掌握VC程序开发
3、的全过程。进一步熟悉掌握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王艳楠实验内容与小组分工小组负责人:白壮丽 联系电话:13731999702三、设计思路与步骤3.1、设备与环境;(1)连接到互联网上的PC机两台。(2)计算机硬件要求:Intel Pentium5 处理器、256MB以上内存、Ethernet网卡、网络若干。(3)计算机软件要求:MS windows 9x/2
7、000/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 bcast;Bcas
8、t.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 0) sznRet = 0;Coutsz; (4)程序结束前,关闭套接字Closesocket(s);4、 程序代码4.1、头文件;#ifndef _INITSOCK#define _INITSOCK#includeiostream.h#includeconio.h#includewinsock2.h#pragma comment(lib,ws2_32.lib)class CInitSockpublic:CInitSock() WSAData wsaData; if(WSAStartup(0x0202,&ws
10、aData)!=0) coutWinsock 系统初始化失败!n; exit(1); coutWinsock 系统初始化成功!n; CInitSock() WSACleanup(); ;#endif4.2、发送端;#include InitSock.h#define PORT 2000#includeCInitSock initsock;void main()SOCKET s = socket(AF_INET,SOCK_DGRAM,0);if(s = INVALID_SOCKET)printf(Create Socket Failed!n);return;printf(Create Socke
11、t 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(bcast);SOCKADDR_IN broadcast;broadcast.sin_family = A