蓝牙/ WiFi直接套接字的高级协议?

时间:2013-06-10 17:11:42

标签: java android android-wifi android-bluetooth

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

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

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

现在,我对特定协议并不挑剔 - 我只是在寻找这种协议层的示例,以便为开发人员更轻松地使用这些类型的连接选项。

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

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

谢谢!


更新

根据Kristopher Micinski对ZeroMQ答案的评论,我认为可能会有一些澄清。

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

大多数情况下,这是我的书。大多数低级套接字的书籍示例都是不现实的,例如“我们打开服务器的套接字并立即开始爆破表示要上传的图像的字节,然后在我们完成时关闭套接字”。虽然这些例子很有效,但你在现实生活中永远不会写出类似的东西:

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

  • 目前很少有开发人员直接使用套接字进行互联网操作

现在,如果该层提供的协议是开发人员习惯的(例如,HTTP),或者即使他们没有使用它(例如,XMPP),也会很酷。而且我会满足于简单的场景(例如,N路支持很酷但不是必需的)。在这方面,基于初步研究(由睡眠不足的大脑进行),ZeroMQ并不是一个糟糕的选择。与XDPP堆栈相比,它缺乏一点“品牌识别”,可以使用任意套接字。但是从袖口上看似乎还能满足我正在寻找的东西。

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

我只是想要一些对实际使用更加真实的祷告。奖励积分如果它是我可以理解的东西,因为我一直使用更高级别的TCP / IP通信协议,所以我缺乏直接套接字操作的经验。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

我做了这个应用程序:https://play.google.com/store/apps/details?id=com.budius.WiFiShoot虽然WiFi Direct连接n握手有点破坏,这是导致我的大多数不满意用户的原因,但我正在使用优秀的https://github.com/EsotericSoftware/kryonet <处理所有通信/ p>

我的代码几乎就是你在他们的例子中看到的,创建kryo,注册类,打开服务器,连接客户端到服务器IP以及用文件信息拍摄对象,然后我用这段代码拍摄实际文件{{ 3}}

希望它有所帮助。