【发布时间】:2016-03-09 13:54:40
【问题描述】:
我正在尝试从 Win7 PC 上的 C# 代码向三星 Note 2 手机发送 bMessage。我有 32feet 蓝牙库,并且正在使用 Visual Studio 2013 社区版。
这是我目前拥有的代码:
string sendMessage = "";
sendMessage = File.ReadAllText(file_path);
BluetoothClient btClient = new BluetoothClient();
btClient.Connect(btEp);
Stream clientStream = btClient.GetStream();
using (StreamWriter utfWriter = new StreamWriter(clientStream, Encoding.UTF8))
{
utfWriter.Write(sendMessage);
}
btEp 是传递给函数以发送消息的蓝牙端点,在别处定义如下:
BluetoothEndPoint BtEp;
这是使用变量构建的:
BtEp = new BluetoothEndPoint(device.DeviceInfo, mapServiceId);
这两个值在运行时取自设备,并在执行期间取以下值:
- mapServiceId {00001132-0000-1000-8000-00805f9b34fb} System.Guid
+ BtEp {BC20A4164A8C:0000113200001000800000805f9b34fb} InTheHand.Net.BluetoothEndPoint
BC20A4164A8C 是设备报告的设备地址。
与手机的连接似乎工作正常并访问了正确的服务,因为当我执行代码时,手机会提示我询问我是否愿意接受从我的 PC 到消息服务器的连接。当语句 'btClient.Connect(btEp);' 时会发生这种情况被执行。
据我所知,我通过流读取并发送到手机的文本文件是一个格式正确的 bMessage,由蓝牙 MAP 规范定义并在其他地方验证。构造如下:
BEGIN:BMSG
VERSION:1.0
STATUS:UNREAD
TYPE:SMS_GSM
FOLDER:TELECOM/MSG/OUTBOX
BEGIN:VCARD
VERSION:2.1
N:(redacted)
TEL:(redacted)
END:VCARD
BEGIN:BENV
BEGIN:VCARD
VERSION:2.1
N:(redacted)
TEL:(redacted)
END:VCARD
BEGIN:BBODY
ENCODING:G-7BIT
LENGTH:47
BEGIN:MSG
This is a short message
END:MSG
END:BBODY
END:BENV
END:BMSG
我已将个人身份信息替换为(已编辑),但实际的文本文件包含正确的名称和数字。我在英国,所以据我所知 SMS_GSM 应该是正确的。
任何帮助将不胜感激!
更新:我在目标手机上安装了蓝牙终端,并通过将相同的数据发送到设备上的虚拟端口而不是消息访问服务器来验证是否正在接收消息。不确定这是否是终端程序的问题,但消息的最后一行被附加到前面并从最后错过。我在文件末尾添加了一个换行符,它已经解决了这个问题,但是当我将 bMessage 发送到 MAS 时仍然没有任何乐趣。
我也尝试了许多不同的流式写入方法:
1) 删除 StreamWriter Encoding 包装器 - 结果相同 2) 从循环中按顺序发送每个字节 - 类似的结果,手机上仍然没有动作。
如果有任何蓝牙通信专家,我真的很感激一些建议!不一定必须是特定于消息访问配置文件的,也不一定是 C#。
我想我的下一步是看看我是否能找到一辆现代汽车,它具有蓝牙配对的 MAP 服务,可以连接到手机,并在使用类似功能时可能嗅探数据包???
03/02/16 - 在我的手机和新车之间嗅探数据包,同时在两个方向发送/接收消息,并将其与我的 PC/代码和手机之间的嗅探数据包进行比较(感谢 Android!开发选项本机允许 BT 数据包记录并能够将其转储到 Wireshark 进行分析)。我的代码使用的是蓝牙客户端,它通过 BT 协议栈中的 RFCOMM 运行,而汽车使用 L2CAP。 L2CAP 是 BT 堆栈中低于 RFCOMM 的一个级别,32Feet 有一个等效的 L2CapClient 可以在此级别上运行。已经实现了这一点,但它会引发错误。事实证明,尽管 L2CAP 受支持,但并非所有使用它的配置文件都支持,而 MAP 似乎就是其中之一。
我将回答这个问题,以便为任何偶然发现它的人提供可能的选择。
【问题讨论】:
-
为投票干杯!假设他们是对花费的赏金的同情票,但仍然没有答案?非常感谢,几乎让我的代表达到了在我提供赏金之前的水平!如果我能解决这个问题,我会相应地更新帖子......