通过蓝牙从 Wear OS 发送 UDP 消息
Posted
技术标签:
【中文标题】通过蓝牙从 Wear OS 发送 UDP 消息【英文标题】:send UDP messages from Wear OS via Bluetooth 【发布时间】:2021-07-17 15:04:26 【问题描述】:我的目标是从 SmartWatch(运行 wear os 2)向同一网络上的 Arduino 发送一条 UDP 消息(小于 100 字节)。只要 SmartWatch 保持连接到 wifi(手表的 IP 地址:145.167.189.23),它就可以很好地工作。 但是当我打开蓝牙时,SmartWatch 会禁用 wifi 并通过连接蓝牙的手机切换到互联网连接。 SmartWatch 从移动设备获取互联网连接子网中的 IP 地址(如果移动设备的 IP 地址为 145.167.189.105,则获取 145.167.177.4)。 TCP 请求,如“***.com”工作正常。
如果我现在尝试发送 UDP 消息,Arduino 将不会收到任何消息。 我已经尝试向 255.255.255.255、145.255.255.255、145.167.255.255、145.167.189.255 发送 UDP 消息,但没有任何东西到达 Arduino(由 Wireshark 验证)。 六年前有同样的问题(Simple UDP Broadcast not working on android Wear),当时wear os 2 不可用。唯一提出的解决方案是“磨损数据层”。我也已经尝试过了,但观察到了非常大的延迟(大约 3 秒)。因此,这些根本不代表我的解决方案。
wear os 上网络访问的documentation 只说
您可以使用 HTTP、TCP 和 UDP 等协议
也许有人可以给我一个提示,为什么 UDP 消息没有从手机转发。
【问题讨论】:
【参考方案1】:只有 DNS udp 包可以转发到手机。
-
它设置了一些 iptable 规则来将 udp 包转发到 TPROXY。查看以下规则(iptables -t mangle -L)。它不会将 udp 包转发到 Reserved IP addresses。
Chain oem_CW_PROXY_UDP (22 references)
target prot opt source destination
RETURN all -- anywhere 0.0.0.0/8
RETURN all -- anywhere loaclhost/8
RETURN all -- anywhere 100.64.0.0/10
RETURN all -- anywhere 127.0.0.0/8
RETURN all -- anywhere 169.254.0.0/16
RETURN all -- anywhere 172.16.0.0/12
RETURN all -- anywhere 192.0.0.0/29
RETURN all -- anywhere 192.0.2.0/24
RETURN all -- anywhere 192.168.0.0/16
RETURN all -- anywhere 198.18.0.0/15
RETURN all -- anywhere 198.51.100.0/24
RETURN all -- anywhere 203.0.113.0/24
RETURN all -- anywhere 224.0.0.0/4
RETURN all -- anywhere 240.0.0.0/4
RETURN all -- anywhere 255.255.255.255
TPROXY udp -- anywhere anywhere TPROXY redirect 0.0.0.0:35070 mark 0x1/0x1
-
TPROXY 将通过蓝牙插座将接收到的 udp 包转发到手机。但它只会转发DNS包,这可以从手表的logcat中看到。
似乎 Wear OS 决定在某个时候只转发 DNS 包。
05-20 12:20:31.269806 1263 5866 D HOME : [ClockworkProxyUdp]Got packet with 47 bytes, from: /192.168.167.239:36215 original dst: /8.8.8.8:53
05-20 12:21:05.264492 1263 5866 D HOME : [ClockworkProxyUdp]Got packet with 47 bytes, from: /192.168.167.239:63348 original dst: /8.8.8.8:53
05-20 12:21:05.272685 1263 5866 D HOME : [ClockworkProxyUdp]Got packet with 32 bytes, from: /192.168.167.239:34219 original dst: /8.8.8.8:53
05-20 12:21:38.282089 1263 5866 D HOME : [ClockworkProxyUdp]Got packet with 47 bytes, from: /192.168.167.239:54529 original dst: /8.8.8.8:53
05-20 12:21:38.287255 1263 5866 D HOME : [ClockworkProxyUdp]Got packet with 32 bytes, from: /192.168.167.239:58688 original dst: /8.8.8.8:53
【讨论】:
以上是关于通过蓝牙从 Wear OS 发送 UDP 消息的主要内容,如果未能解决你的问题,请参考以下文章