2

我目前正在使用 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 上运行良好。我如何使它也可以通过蓝牙工作?我用谷歌搜索了一堆,找不到任何东西......我需要创建两个单独的套接字吗?一个绑定wifi接口,一个绑定蓝牙接口?

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

4

2 回答 2

1

我认为您缺少启用 BT over ip 协议的 BT 堆栈访问。此外,多播依赖网络设备(路由器)来管理这些组和注册。BT 需要 ZeroConf 网络的概念(也可以用于 wifi),但以点对点的方式进行管理。查看 Bonjour 或 Dnssd 以获得比 GameKit 更接近套接字级别的实现。

于 2012-08-20T19:48:54.433 回答
1

你很亲密。您可以在此 StackOverflow 问题中找到指向有用信息的指针,也可以使用包含此功能的库(例如HHServices) 。

老实说,我尝试过这条路线,但运气不佳,但我希望这能为您指明正确的方向。让我知道你是否知道了!

于 2013-01-23T11:12:42.413 回答