首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C#中的32feet.net库将bMessage从Windows发送到消息访问服务器

使用C#中的32feet.net库将bMessage从Windows发送到消息访问服务器
EN

Stack Overflow用户
提问于 2015-12-04 23:21:40
回答 3查看 2.1K关注 0票数 13

我正在尝试从Win7 PC上的C#代码向三星Note2手机发送bMessage。我有32英尺的蓝牙库,正在使用Visual Studio 2013社区版。

这是我目前拥有的代码:

代码语言:javascript
复制
    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是传递给发送消息的函数的蓝牙端点,在其他地方定义如下:

代码语言:javascript
复制
BluetoothEndPoint BtEp;

这是使用以下变量构建的:

代码语言:javascript
复制
BtEp = new BluetoothEndPoint(device.DeviceInfo, mapServiceId);

这两个值都是在运行时从设备获取的,并在执行过程中获取以下值:

代码语言:javascript
复制
-       mapServiceId    {00001132-0000-1000-8000-00805f9b34fb}  System.Guid
+       BtEp    {BC20A4164A8C:0000113200001000800000805f9b34fb} InTheHand.Net.BluetoothEndPoint

其中BC20A4164A8C是由设备报告的设备地址。

与电话的连接似乎工作正常,并且可以访问正确的服务,因为当我执行代码时,电话会提示我询问是否愿意接受从PC到消息服务器的连接。当执行语句'btClient.Connect(btEp);‘时,会发生这种情况。

据我所知,我通过流读取并发送到手机的文本文件是蓝牙映射规范定义的格式正确的bMessage,并在其他地方进行了验证。它的构造如下:

代码语言:javascript
复制
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#。

我猜我的下一步将是看看我是否可以找到一辆现代汽车,它具有用于地图服务的蓝牙配对,并且可以连接到手机,并可能在使用类似功能时嗅探数据包?

03/02/16 -在我的手机和一辆新车之间嗅探数据包,同时双向发送/接收消息,并将这与我的PC/代码和手机之间的嗅探数据包进行比较(感谢Android!dev选项本机允许BT数据包记录,并能够将其转储到Wireshark中进行分析)。我的代码使用的是BluetoothClient,它在BT协议栈中的RFCOMM上运行,而汽车使用的是L2CAP。L2CAP是BT堆栈中低于RFCOMM的级别,32Feet具有在此级别运行的等效L2CapClient。已经实现了这一点,但它抛出了一个错误。事实证明,尽管L2CAP是受支持的,但并不是所有使用它的配置文件都是受支持的,MAP似乎就是其中之一。

我将回答这个问题,为其他偶然发现这个问题的人提供可能的选择。

EN

回答 3

Stack Overflow用户

发布于 2016-02-03 16:44:37

我想我已经确定使用32Feet/C#来做这件事是不可行的。如果您想要访问电话的蓝牙消息访问服务器/配置文件/客户端(MAS ),则无法使用32Feet.Net库中的高级函数执行此操作。相反,您需要使用C++中的低级代码,如MSDN上所述:

https://msdn.microsoft.com/en-us/library/windows/hardware/ff536674%28v=vs.85%29.aspx

19/02/16 -我已经设法使用蓝牙链接到我手机上的免提配置文件来发起呼叫(这是我想做的其他事情,但我错误地认为SMS会更容易!)。我已经使用AT命令来实现这一点。所以还是没有短信。

票数 2
EN

Stack Overflow用户

发布于 2016-04-02 17:13:01

我正在尝试实现与OP相同的功能,并且我在32英尺库中遇到了同样的问题。

然而,我注意到MAC上有一个名为Handsfree的应用程序,它通过蓝牙实现拨号和发送消息。我使用Android的蓝牙HCI snoop日志来了解它是如何工作的。日志可在此处下载:https://www.dropbox.com/s/34ol5kd0o3oceib/btsnoop_hci.log?dl=0

日志中包含一个发送消息的示例。手机还会发送一条消息通知。希望这有助于解决短信发送问题。

票数 2
EN

Stack Overflow用户

发布于 2016-04-09 17:52:20

所以,我做了更多的调查。我使用blucat扫描手机上可用的服务。在这些服务中有:"MAP SMS/MMS“- btgoep://980D2E0CFB51:4。根据MAP规范,MAP是建立在OBEX协议之上的配置文件。因此,使用OBEX链接连接到此服务是有意义的。BTGOEP =蓝牙通用对象交换协议。我尝试使用上面的链接连接到地图,使用的是bluecove java API,但得到的响应码是198,这意味着OBEX_HTTP_NOT_ACCEPTABLE。

然后我找到了this post。最后一个答案是:,您基本上创建了两个OBEX会话:一个消息访问服务( Message Access Service,MAS),它随后向设备注册,以使用消息通知服务( Message Notification Service,MNS)接收通知。注册后,设备将打开与您的MNS会话,并在收到消息时通知您。您还需要使用蓝牙SDP.来广告您的MNS服务

所以我在想,我没有正确连接到地图服务,我得到了响应码198。也许还有另一种连接地图服务的方式,以某种方式注册到手机上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34091622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档