使用套接字实现多播通信

75 篇文章 2 订阅
51 篇文章 0 订阅
 多播通信需要如下三个条件:

(1)使用UDP传输协议

(2)使用多播地址(224.0.0.1-239.255.255.255)

(3)另外需要中间的所有路由器都需要支持多播协议才可以。

需要注意的一点:

在MSDN中关于setsockopt()函数有一个注意事项:

Note  If the setsockopt function is called before the bind function, TCP/IP options will not be checked with TCP/IP until the bind occurs. In this case, the setsockopt function call will always succeed, but the bind function call can fail because of an early setsockopt failing.

如果setsockopt函数设定TCP/IP协议层的选项,则需要在bind函数之后调用才会有效;如果在设置TCP/IP选项的情况下,先调用setsockopt,然后再调用bind函数,则bind函数会提示出错!

发送端:

发送方直接往多播地址发送信息就可以,该信息会由路由传送到对该多播信息感兴趣的端口(该端口加入了多播组)

1. 创建UDP套接字;

2.向多播地址发送信息;

注意:一般默认协议头部的TTL=1,即该多播信息只能在本地局域网中进行传输,如果需要发往更大的地址范围,可以调用setsockopt()函数修改IP协议的TTL选项

setsockopt(sendSock, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&nTTL, sizeof(int));

接收端:

接收端必须加入多播组才可以。这样路由才会知道该端口对某个多播组的消息感兴趣,从而把信息传输到该端点。

加入多播组是在IP协议层,即网络层进行设置的。

1.创建UDP套接字;

2.绑定接收地址;

注意:这里绑定的是本机的IP,端口是多播发送的端口。直接绑定多播IP肯定会失败的!

3.设置套接字的选项;

在C#中,有特定的MulticastOption类,用以加入多播组时使用,并将该类对象作为套接字选项的值传入。

(此时才用到多播组的IP)

具体为IP层协议(IPPROTO_IP)上的IP_ADD_MEMERSHIP(加入多播组)和IP_DROP_MEMBERSHIP(退出多播组)选项

注意:步骤2、3顺序不能反,否则在调用setsockopt()函数时会出错,出错信息为:WSAEINVAL

通过结构体ip_mreq(很好记,IP层,请求多播),例如(windows平台下)

 ip_mreq mcast;
 mcast.imr_interface.S_un.S_addr=INADDR_ANY;
 mcast.imr_multiaddr.S_un.S_addr=inet_addr("234.5.6.7");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值