Windows下nObex连接安卓蓝牙OBEX返回HTTP Not Acceptable问题求助
解析OBEX CONNECT请求返回0xc6(HTTP Not Acceptable)的原因
让我来帮你拆解这个蓝牙OBEX连接失败的问题,从你提供的报文和OBEX协议规范入手,定位几个可能的核心原因:
1. OBEX版本不兼容
你发送的请求里OBEX版本字段是0x10(对应OBEX 1.0),但现在几乎所有安卓设备都默认支持OBEX 1.1(版本码0x11)。虽然OBEX协议声称向下兼容,但不少安卓设备会直接拒绝版本过低的连接请求,这是触发0xc6(Not Acceptable)响应的常见原因。
2. TARGET头部格式错误
你的请求里的TARGET头部(报文里的F,对应OBEX头部标识符0x46)内容是1106——这是文件传输服务(FTP)UUID的最后四位,但OBEX协议要求TARGET头部必须传递完整的128位UUID,或者设备能识别的完整标识字符串。正确的FTP UUID是00001106-0000-1000-8000-00805F9B34FB,你只传了末尾四位,手机无法识别这个不完整的服务标识,因此直接拒绝了连接。
3. 最大消息长度的潜在不匹配
你请求里设置的最大OBEX消息长度是0xffff(65535字节),而手机响应里返回的它支持的最大长度是0xfffe(65534字节)。虽然这不是直接导致0xc6的原因,但如果后续请求不匹配这个值,可能会引发其他问题,建议后续调整请求时使用设备返回的这个长度。
修复建议
- 升级OBEX版本:把请求里的OBEX版本字段从
0x10改成0x11,适配主流安卓设备的版本要求。 - 修正TARGET头部:替换
1106为完整的FTP UUID字节流,比如转换成十六进制字节的形式:b'\x00\x00\x11\x06\x00\x00\x10\x00\x80\x00\x00\x80\x5F\x9B\x34\xFB',同时把头部长度从0x0007改成0x0010(对应16字节的UUID长度)。 - 匹配设备支持的最大消息长度:后续请求使用响应里的
0xfffe作为最大消息长度,避免参数不匹配。
这里给你一个调整后的CONNECT请求报文示例(核心字段已修正):
# 调整后的CONNECT请求:OBEX 1.1,完整FTP UUID,匹配设备最大长度 connect_msg = b'\x80\x00\x1a\x11\x00\xff\xfe\x46\x00\x10\x00\x00\x11\x06\x00\x00\x10\x00\x80\x00\x00\x80\x5F\x9B\x34\xFB'
内容的提问来源于stack exchange,提问作者MartinM
相关产品推荐
相关产品推荐

