我目前正在使用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就是这样做的,对吧?答案 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!