有用GCDAsyncUdpSocket发送组播的么?

zero_028 发布于 2014年01月22日
无人欣赏。

//初始化响应socket self.responseSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatchgetmain_queue()];

//绑定广播响应端口
[self.responseSocket bindToPort:0xfaa5 error:&error];
if (error) {
    NSLog(@"绑定响应端口%d失败%@",0xfaa5,error);
}

[self.responseSocket enableBroadcast:YES error:nil];
if (error) {
    NSLog(@"开启组播%d失败%@",0xfaa5,error);
}

[self.responseSocket joinMulticastGroup:@"239.2.2.2" error:&error];
if (error) {
    NSLog(@"开启加入组播%d失败%@",Port_Response,error);
}

//开始接收数据
[self.responseSocket beginReceiving:&error];
if (error) {
    NSLog(@"开始接收数据失败..%@",error);
}

组播地址改成224.0.0.1就可以接收到,改称239.2.2.2就不行了。 iOS是不支持239...*这个地址么?

共2条回复
chancy 回复于 2014年01月22日

不懂为什么不行,不过你的 enableBroadcast 那里最后error传了个nil,判断的时候还用上一个error,小笔误一个。另外如果实在用GCDAsyncUdpSocket 不能发,也可以试试用更低一点的BSD的 socket api来试试。 P.S. 楼主还可以试着在 stackoverflow上发一下试试。

zero_028 回复于 2014年01月23日

1楼 @chancy

谢谢哈,最后找到原因了。 GCDAsyncUdpSocket默认设置TTL是1,所以数据包在路由器被丢弃了..

登录 或者 注册
相关帖子