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

我目前使用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]; 

这工作得很好,无线networking。 我如何使它通过蓝牙工作呢? 我GOOGLE了一堆,找不到任何东西…我需要创build两个单独的套接字? 一个绑定到wifi接口,另一个绑定到蓝牙接口?

编辑:还是我困惑的东西根本? 这一定是可能的。 GameKit的GKSession完全是这样的,对吧?

我想你错过了英国电信协议BT协议的BT协议。 另外,多播依靠networking设备(路由器)来pipe理这些组和注册。 BT需要ZeroConfnetworking(也可以用于wifi)的概念,但是以对等的方式进行pipe理。 看看Bonjour或者Dnssd的实现比GameKit更接近套接字级别。

你非常接近。 您可以在此StackOverflow问题中find有用信息的指针,也可以使用包装此function的HHServices等库。

老实说我已经尝试过这条路线,但是我希望这一点能让你朝正确的方向发展。 让我知道,如果你已经知道了!