如何通过wifi和蓝牙使用GCDAsyncUdpSocket进行组播

时间:2012-07-23 22:39:15

标签: ios bluetooth udp multicast gcdasyncsocket

我目前正在使用GCDAsyncUdpSocket在iOS设备之间通过wifi发送多播数据报。

守则非常简单..

客户端

self.socket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self  delegateQueue:dispatch_get_main_queue()];

//omitted error checking
[self.socket bindToPort:12345 error:&err];
[self.socket joinMulticastGroup:@"224.0.1.1" error:&err];
[self.socket beginReceiving:&err];

服务器

self.multicastSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

NSData *d = [@"hello" dataUsingEncoding:NSUTF8StringEncoding];

[self.multicastSocket sendData:d toHost:@"224.0.1.1" port:12345 withTimeout:-1 tag:11];

这适用于wifi。我如何使其在蓝牙上工作?我google了一堆,找不到任何东西......我需要创建两个独立的套接字吗?一个绑定到wifi接口,另一个绑定到蓝牙接口?

编辑:或者我对基本的东西感到困惑?这一定是可能的。 GameKit的GKSession就是这样做的,对吧?

2 个答案:

答案 0 :(得分:1)

我认为你错过了BT堆栈访问,它启用了BT over ip协议。 此外,多播依赖于网络设备(路由器)来管理这些组和注册。 BT需要ZeroConf网络的概念(也可以用于wifi),但是以对等方式管理。 看看Bonjour或Dnssd的实现是否接近套接字级别而不是GameKit。

答案 1 :(得分:1)

你非常接近。您可以在this StackOverflow question中找到指向有用信息的指针,也可以使用包含此功能的HHServices等库。

老实说,我很幸运地尝试了这条路线,但我希望这能指出你正确的方向。 Let me know if you've figured it out!