在Android 2.3实现OBEX推送服务器

编程入门 行业动态 更新时间:2024-10-13 02:17:15
本文介绍了在Android 2.3实现OBEX推送服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我需要设置一个在应用程序OBEX服务器在Android 2.3设备上。使用蓝牙聊天样品code,我能够建立一个OBEX服务器。但是,服务器需要使用自定义的UUID所以服务是没有注册为OBEX服务器

I need to setup an in-app OBEX server on an Android 2.3 device. Using the Bluetooth Chat Sample code I was able to setup an OBEX server. However, the server needs to use a custom UUID so the service is not registered as an 'OBEX Server'

# sdptool browse local ...(snip)... Service Name: OBEX Object Push Service RecHandle: 0x10000 Service Class ID List: UUID 128: ab123abc-1a2b-3c4d-5d7f-1234567890ab Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 18

所以,当我接收数据,它看起来像我收到一个原始的OBEX连接请求:

So, when I receive data, it looks like I am receiving a raw OBEX connection request:

80 00 07 10 00 04 00 00 00 00 ...(snip)... 00 00 00 (1kb file)

有一个OBEX实现,我可以使用或我要实现自己的协议?

Is there an OBEX implementation that I can use or do I have to implement the protocol myself?

我不希望使用内置OBEX服务器 - 这已经是在应用程序。我曾尝试BlueCove但我放弃了它,当我注册一个服务的问题。

I don't want to use the inbuilt OBEX server - this has to be in app. I have tried BlueCove but I abandoned it when I had issues registering a service.

是的,我确实看到了this邮政和阅读链接在里面,但天哪,必须有一个更简单的方法!

Yes, I did see this post and read the link in it, but by golly, there must be an easier way!

推荐答案

我最终实现了自己的协议。这并不像我想象的有毛。因为我期待只有一个特定的客户端连接,我知道该客户端将只推一个文件,我能够部分实现了我所需要的协议只是部分。

I ended up implementing the protocol myself. It wasn't as hairy as I imagined. Since I was expecting only a specific client to connect and I knew that the client would only be pushing one file I was able to partially implement only the sections of the protocol that I needed.

这与了解OBEX协议帮助有些文档是Obex13.pdf为:gitorious/gammu/gsm-docs/trees/e5161a75fb1e1c1608959b27ae3c3940bcf0911b/standards/obex

Some documentation that helped with understanding the OBEX protocol were Obex13.pdf at: gitorious/gammu/gsm-docs/trees/e5161a75fb1e1c1608959b27ae3c3940bcf0911b/standards/obex

我是如何解析的套接字输入流快速片段: (注OBEXUtils和OBEXCons​​tants是我的班。)

A quick snippet of how I parsed the sockets input stream: (Note OBEXUtils and OBEXConstants are my classes.)

try { //Read all bytes passed in bytes = mmInStream.read(buffer); //Ensure we have the entire packet before we proceed // Packet length is in the 1st and 2nd byte expectedLength = OBEXUtils.bytesToShort(buffer[OBEXConstant.LENGTH_IDENTIFIER], buffer[OBEXConstant.LENGTH_IDENTIFIER + 1]); packetLength = bytes; //Keep reading until we get what we expect. while (packetLength < expectedLength) { bytes = mmInStream.read(buffer, packetLength, maxPacketSize); packetLength += bytes; } //Switch on Packet Header switch (buffer[OBEXConstant.HEADER_IDENTIFIER]) { case OBEXConstant.CONNECT: //Parse the packet and return an acknowledgement packet write(OBEXConnect.parsePacket(buffer)); break; case OBEXConstant.PUT: case OBEXConstant.PUT_FINAL: //Parse the PUT packet and return an acknowledgement packet //For Parsing PUT packets I referred to the android and bluecove implementations write(putPacket.appendPacket(buffer, packetLength)); break; case OBEXConstant.DISCONNECT: //Parse the packet and return an acknowledgement packet write(OBEXDisconnect.parsePacket(buffer)); break; case OBEXConstant.GET: case OBEXConstant.GET_FINAL: case OBEXConstant.SETPATH: case OBEXConstant.SETPATH_FINAL: case OBEXConstant.SESSION: //Did not implement these break; case OBEXConstant.ABORT: Log.w(Constant.TAG, TAG + "ABORT Request Received"); isDisconnected = true; break; default: break; } } catch (final IOException e) { ...(snip)... }

OBEXCons​​tant的剪断:

Snip of OBEXConstant:

public static final byte FINAL_BIT = (byte) 0x80; public static final byte CONNECT = 0x00 | FINAL_BIT; //*high bit always set Connect choose your partner, negotiate capabilities public static final byte DISCONNECT = 0x01 | FINAL_BIT; //*high bit always set Disconnect signal the end of the session public static final byte PUT = 0x02; //(0x82) Put send an object public static final byte PUT_FINAL = PUT | FINAL_BIT; public static final byte GET = 0x03; //(0x83) Get get an object public static final byte GET_FINAL = GET | FINAL_BIT; //(0x83) Get get an object public static final byte SETPATH = 0x05; public static final byte SETPATH_FINAL = SETPATH | FINAL_BIT; public static final byte SESSION = 0x07; public static final byte ABORT = (byte) 0xFF; public static final byte OBEX_RESPONSE_CONTINUE = (byte) 0x90; public static final byte OBEX_RESPONSE_SUCCESS = (byte) 0xA0;

更多推荐

在Android 2.3实现OBEX推送服务器

本文发布于:2023-07-14 10:20:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1104091.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:服务器   Android   OBEX

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!