9

当您在 Android 中使用蓝牙或 WiFi Direct 时,在所有握手等操作结束时,您会使用套接字。

使用 TCP/IP,我们在套接字之上有无数个库,用于高级协议:HTTP、XMPP、IMAP 等。感谢这些库,我们可以处理更多特定于域的抽象一个操作(例如,“下载这个文件”),由库处理低级套接字管道。

问题:对于任何高级协议,是否存在已知可与通过 Android 的蓝牙和/或 WiFi Direct 层生成的套接字一起工作(或可能工作)的等效协议?

现在,我对特定协议并不挑剔——我只是在寻找这种协议层的示例,以便开发人员更容易使用这些连接选项。

例如,看起来我可以为OkHTTP创建一个分支或附加组件,它使用套接字的替代源,并且我可能创建一个执行相同操作的 Java HTTP 服务器。鉴于这些,应用程序开发人员将编写通过蓝牙或 WiFi Direct 通信的 HTTP 应用程序(并且,至少在客户端,编码应该在感觉上相当“自然”,一旦连接特定的配对和握手已经开始)。

IOW,回到处理原始套接字的感觉就像二十年前...... :-)

谢谢!


更新

根据 Kristopher Micinski 对 ZeroMQ 答案的评论,我认为可能需要进行一些澄清。

说我想要的更容易:我不想在创建套接字之后触摸它们。更高级别的其他东西应该为我处理这些,加上处理我认为的“协议”(例如,确定某些通信操作何时结束,超出套接字关闭)。

大多数情况下,这是为了我的书。大多数关于低级套接字内容的书籍示例都是不切实际的,例如“我们打开一个到服务器的套接字并立即开始爆破代表要上传的某些图像的字节,然后在完成后关闭套接字”。虽然这些示例有效,但在现实生活中你永远不会写出这样的东西:

  • 如果您真的在套接字级别工作,那么即使您自己滚动协议,您也将实现一些希望解决身份验证、错误处理等问题的协议

  • 今天很少有开发人员直接使用套接字进行 Internet 操作

现在,如果该层提供的协议是开发人员习惯的(例如,HTTP)或即使他们没有使用过(例如,XMPP)也听说过的协议,那就太好了。我会满足于简单的场景(例如,N-way 支持很酷但不是必需的)。在这方面,基于初步研究(由睡眠不足的大脑进行),ZeroMQ 不是一个糟糕的选择。与可以与任意套接字一起使用的 XMPP 堆栈相比,它缺乏一点“品牌认知度”。但即兴发挥它似乎满足了我正在寻找的其他东西。

我认识到这些堆栈将受到底层传输的限制(例如,蓝牙适用于 N 路,仅适用于较小的 N 值)。我当然不想在这里或在我的书中描述我描述的任何解决方案都是基于套接字的通信的全部和全部。

我只想要一些祈祷在实际使用中更现实的东西。如果它是我可以理解的东西,我会加分,因为我一直使用更高级别的协议进行 TCP/IP 通信,所以我缺乏直接套接字操作的经验。

4

2 回答 2

2

我发现ZeroMQ对于管理套接字连接很有用。他们支持多种语言,包括 JAVA。通过 wifi-direct 或 BT 建立连接后,您可以使用它来管理套接字。

于 2013-06-11T11:18:42.110 回答
0

我知道这是一个有点老的问题并且已经回答了,但我想做出贡献。

我做了这个应用程序:https ://play.google.com/store/apps/details?id=com.budius.WiFiShoot虽然 WiFi Direct 连接 n 握手有些中断,这也是导致我大多数不满意用户的原因,我我正在使用出色的https://github.com/EsotericSoftware/kryonet处理所有通信

我的代码与您在他们的示例中看到的差不多,创建 kryo,注册类,打开服务器,将客户端连接到服务器 IP 并使用文件信息拍摄对象,然后我使用此代码拍摄实际文件https://code .google.com/p/kryonet/source/browse/trunk/kryonet/test/com/esotericsoftware/kryonet/InputStreamSenderTest.java

希望能帮助到你。

于 2014-01-11T23:11:17.557 回答