gpt4 book ai didi

android - 网络服务发现 Android

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:37 26 4
gpt4 key购买 nike

我正在努力构建一个使用网络服务发现的应用程序。这个帖子我已经跟进了http://developer.android.com/training/connect-devices-wirelessly/nsd-wifi-direct.html该应用程序正在运行,但我有几个基于下面显示的代码的问题。

WifiP2pDnsSdServiceInfo.newInstance("_test", "_presence._tcp", record);

记录 似乎无法容纳太多数据。例如,如果记录大小为 20,则不会发送信息。你能告诉我尺寸限制吗?我可以发送多少数据?

我不清楚可用的服务类型,例如_presence._tcp。它是特定于供应商的吗?了解支持的服务类型列表会很高兴。服务类型是否决定了我可以发送的信息量?如果是这样,哪种服务类型更适合发送大小合适的 map 。

更新:我已经在 http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt 查看了这份草稿请参阅6.2 DNS-SD TXT 记录大小部分。看起来大小限制很小,如“典型 DNS-SD TXT 记录的总大小旨在很小-- 200 字节或更少。在需要更多数据的情况下(例如 LPR 打印 [BJP]),将总大小保持在 400 字节以下应该可以将其放入单个 512 字节的 DNS 消息中”。有什么想法吗?

最佳答案

我是 Java/Android 的新手,但我能够进行一些实验。

DNS 服务 API 需要一个 <String, String> 的映射来记录。如果我们只想专注于数据,我们只使用一对并将键设置为“”。在这种情况下,您可以传输 92 个字符:

record.put("", "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");

这是您可以通过无线方式发送(或更好地说,接收)的最大值。我很好奇如果我想发送一些二进制数据会发生什么。使用 byte[] 数组而不是 String 不是一个好主意(崩溃)所以我们必须坚持使用字符串:

record.put("", "\u1234\u5678\u9012\u3456\u7890\u1234\u5678\u9012\u3456\u7890\u1234\u5678\u9012\u3456\u7890\u1234\u5678\u9012\u3456\u7890\u1234\u5678\u9012\u1234\u5678\u9012\u3456\u7890\u1234\u5678");

有趣的是,这是您可以发送的最大值(30 个 Unicode 字符/60 个字节)。原因是 Wi-Fi API 似乎将所有字符串都转换为 UTF-32,即第一个示例仅使用 ASCII 值(即在 UTF-32 中一个字符 = 一个字节),第二个示例使用范围内的所有值0x8000 - 0xffff(即在 UTF-32 中,一个字符 = 3 个字节)。

如果你算一下,你会看到 30 x 3 字节 = 90 字节,即应该还剩下 2 个字节(字符):

record.put("", "\u1234\u5678\u9012\u3456\u7890\u1234\u5678\u9012\u3456\u7890\u1234\u5678\u9012\u3456\u7890\u1234\u5678\u9012\u3456\u7890\u1234\u5678\u9012\u1234\u5678\u9012\u3456\u7890\u1234\u5678\u0031\u0032");

仍然有效,达到了 92 字节的限制。请注意,您不能将备用的两个字节用于通用数据(即类似 0x1234 的内容),因为它被编码为 3 字节值,这将不再有效。

有趣的问题是使用二进制方法还是使用 base64 之类的方法更好地编码数据。维基百科说 base64 将三个八位字节转换为四个编码字符,即对于 92 个 ASCII 字符,我们将获得 69 个字节的数据,使 base64 对这一小部分数据的效率更高。

关于android - 网络服务发现 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17873197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com