我正在尝试从Win7 PC上的C#代码发送bMessage到Samsung Note 2手机.我有32英尺蓝牙库,我正在使用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编码包装器 - 相同的结果2)从循环顺序发送每个字节 - 类似的结果,仍然没有在电话上的动作.
如果有任何蓝牙通信专家,我真的很感激一些建议!不一定必须是消息访问配置文件特定的,也不一定是C#.
我想我的下一步是看看我是否能找到一款现代汽车,它具有蓝牙配对的MAP服务,可以连接到手机,也可能在使用类似功能时嗅探数据包???
03/02/16 - 在我的手机和新车之间嗅探包裹,同时在两个方向发送/接收消息,并将其与我的PC /代码和手机之间的嗅探包进行比较(感谢Android!dev选项本身允许BT数据包记录,并且能够将其转储到Wireshark进行分析).我的代码使用的是BluetoothClient,它在BT协议栈中通过RFCOMM运行,而汽车则使用L2CAP.L2CAP是BT堆栈中低于RFCOMM的级别,32Feet具有等效的L2CapClient以在此级别运行.已经实现了这个,但它抛出了一个错误.事实证明,虽然支持L2CAP,但并非所有使用它的配置文件都是MAP,而MAP似乎就是其中之一.
我将回答这个问题,为偶然发现它的任何人提供可能的选择.