设为首页 加入收藏

TOP

2.2.2 小试牛刀--模拟实现Windows的UDP程序(4)
2013-10-07 15:53:31 来源: 作者: 【 】 浏览:69
Tags:2.2.2 小试牛刀 模拟 实现 Windows UDP 程序

2.2.2  小试牛刀--模拟实现Windows的UDP程序(4)

6. 分析多播消息接收流程

多播消息的接收流程如图2-14所示。此过程用于创建多播套接字、设置套接字、加入多播组等。服务于多播信息发送和接收模块。在程序中,首先创建UDP套接字,然后设置本地地址和多播地址,并将套接字和本地地址绑定;绑定成功后则设置多播数据的TTL值,在默认情况下,TTL值是1。也就是说,多播数据遇到第一个路由器,便会被它放弃,并不允许传出本地网络之外,即只有同一个网络内的多播成员才能收到数据。如果增大TTL值,多播数据就可以经历多个路由器传到其他网络。为了设置TTL值,需要将套接字值设置为IPPROTO_IP,类型为IP_MULTICAST_TTL,当TTL值设置成功后,程序将判断是否允许返还。这是针对发送者而言的,通过设置套接字的IP_MULTICAST_LOOP选项来实现。此选项决定了程序是否接收自己的多播数据,其级别也是RPPRTO_IP。在最后,通过调用WSAJoinLeaf()函数加入指定的多播组。

 
图2-14  多播消息控制流程图

7. 设计数据结构

在本项目中,并没有定义专门的数据结构,只是在广播和多播中定义的常量和全局变量。

(1) 广播常量有如下两个。

BCASTPORT:广播的端口号,默认是5050。

BCOUNT:广播的最大消息数,用于设置发送或接收的最多消息数量,超过此值将停止发送或接收。默认值是10。

(2) 多播常量有如下4个。

MCASTADDR:是多播组的地址,默认值是224.3.5.8。

MCASTPORT:多播的端口号,默认值是25000。

BUFSIZE:设置缓冲区的大小,默认值是1024。

MCOUNT:设置多播的最大消息数,用于设置发送或接收的最多消息数量,超过此值将停止发送或接收。默认值是10。

(3) 定义广播全局变量。

SOCKET socketBro:广播信息发送端的UDP套接字。

SOCKET socketRec:广播信息接收端的UDP套接字。

struct sockaddr_in addrBro:广播地址结构,其IP地址部分通过另一个全局变量bcastAddr转换而来。

struct sockaddr_in addrRec:接收广播信息的本地地址。

BOOL broadSendFlag:广播信息身份的标志,如果为FALSE,表示是消息接收者,否则是消息发送者。

BOOL broadFlag:广播标志,如果为TRUE,表示该程序进行广播操作。

DWORD bCoun:双字节表示消息数量的变量,该变量的初始赋值为BCOUNT。

DWORD bcastAddr:表示广播地址参数的双字节变量,初始赋值是INADDR_ BROADCAST,表示全1的广播地址,用于接收用户提供的参数。

short bPort:广播的端口号,默认是BCASTPORT。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.2 小试牛刀--模拟实现Windows.. 下一篇2.2.2 小试牛刀--模拟实现Windows..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)