对于我在Apple Watch上进行的项目,我正在寻找一种向本地网络上的服务器发送数据流的方法。这是快速的在线数据,所以我更喜欢它将通过UDP发送(但它并不是我的严格要求)。数据是从手表读取的当前加速度计,每秒钟读取一次。
我使用的是WatchOS 2(Beta 4),iOS 9(Beta 4)(以及最新的Xcode 7测试版)。
我使用了以下代码:
- (void) sendMsg: (NSString *)msg{
int socketSD = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (socketSD <= 0) {
NSLog(@"Error: Could not open socket.");
return;
}
// set socket options enable broadcast
int broadcastEnable = 1;
int ret = setsockopt(socketSD, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));
if (ret) {
NSLog(@"Error: Could not open set socket to broadcast mode");
close(socketSD);
return;
}
// Configure the port and ip we want to send to
struct sockaddr_in broadcastAddr;
memset(&broadcastAddr, 0, sizeof(broadcastAddr));
broadcastAddr.sin_family = AF_INET;
inet_pton(AF_INET, SERVER_IP, &broadcastAddr.sin_addr);
broadcastAddr.sin_port = htons(SERVER_PORT);
char *request = "Message from Watch";
ret = sendto(socketSD, request, strlen(request), 0, (struct sockaddr*)&broadcastAddr, sizeof(broadcastAddr));
if (ret < 0) {
NSLog(@"Error: Could not open send broadcast.");
close(socketSD);
return;
}
}
- (IBAction)watchGoButtonTouched {
[self sendMsg:@"Hi"];
}
成功将消息发送到Watch模拟器中的服务器,但是当在实际监视上运行时,我收到错误Error: Could not open send broadcast.
。
我应该提一下,相同的代码在手表连接的iPhone上运行良好。
由于这些原因,我担心上面的代码因代码问题而失败,超出了我的代码范围。我很想知道你是否认为不是。
如果是测试版问题,我不能等待修复,所以我想在这里询问如何发送符合以下几点的数据:
非常感谢任何帮助!
非常感谢:) 丹
答案 0 :(得分:0)
嗯,从WatchOS 2 Beta 5开始,仍无法从手表发送快速信息。
我确实找到了一种解决方法(有限制使得不适合进行制作) - 尽管原帖子评论中提到的方法没有能够高速传递信息,我和#39;注意到日志(通过NSLog()
发布)确实非常快到Xcode控制台窗口。我猜Apple使用低级蓝牙通信系统传递这些信息。
我写了一个简短的脚本来从Xcode读取这些日志,从而近乎实时地从手表中获取数据。从Mac我可以将它发送到我想要的任何地方(如果我愿意,甚至可以在途中处理它)。此处描述了解决方案及其限制 - Reading Apple Watch syslog (NSLog()) in real-time。