从WatchKit

时间:2015-08-04 11:39:25

标签: ios sockets watchkit apple-watch

对于我在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上运行良好。

由于这些原因,我担心上面的代码因代码问题而失败,超出了我的代码范围。我很想知道你是否认为不是。

如果是测试版问题,我不能等待修复,所以我想在这里询问如何发送符合以下几点的数据:

  • 基本上是一种直接从手表向本地网络上的UDP服务器发送流量的方法。
  • 数据必须在收到时发送(因此不能连接多个数据点)
  • UDP是首选,但是以低延迟发送数据流的任何其他方式都是好的。
  • 这是一个黑客马拉松项目,这是一个非常酷的想法的概念验证。这意味着,AppStore合规性或电池问题不适用于此。

非常感谢任何帮助!

非常感谢:) 丹

1 个答案:

答案 0 :(得分:0)

嗯,从WatchOS 2 Beta 5开始,仍无法从手表发送快速信息。

我确实找到了一种解决方法(有限制使得不适合进行制作) - 尽管原帖子评论中提到的方法没有能够高速传递信息,我和#39;注意到日志(通过NSLog()发布)确实非常快到Xcode控制台窗口。我猜Apple使用低级蓝牙通信系统传递这些信息。

我写了一个简短的脚本来从Xcode读取这些日志,从而近乎实时地从手表中获取数据。从Mac我可以将它发送到我想要的任何地方(如果我愿意,甚至可以在途中处理它)。此处描述了解决方案及其限制 - Reading Apple Watch syslog (NSLog()) in real-time