【问题标题】:Bluetooth send/receive text without pairing using C# on 2 Windows 7 Computers在 2 台 Windows 7 计算机上使用 C# 蓝牙发送/接收文本而无需配对
【发布时间】:2011-10-24 11:12:39
【问题描述】:

我已经读到,在通过蓝牙进行通信之前必须先配对,但我想知道,

我可以创建一个应用程序来读取文本吗? 由其他蓝牙应用广播而未配对。

因为我们可以看到设备周围其他蓝牙设备的名称。所以我们不能将我们的蓝牙收音机设置为可以读取任何蓝牙广播文本消息的状态。

示例:在 android 中有 createInsecureRfcommSocketToServiceRecord()listenUsingInsecureRfcommWithServiceRecord() 但在 C# 中没有这样的 windows 吗?

谢谢


我的终极目标 :-)

正在创建一个在 Windows 7 PC 上运行的应用程序,该应用程序为点对点文件传输和聊天创建即时蓝牙网络

场景

有一群人,每个人的每台计算机上都有这个应用程序,一个人想与其他人共享一个文件(可能是电子书、PDF 或任何东西)。他在他的应用程序配置中设置了他的网络“网络”(或任何其他名称),其他人也在每个应用程序上设置了相同的名称。最后,每个用户都可以在他们的应用程序显示中看到他们周围的其他蓝牙节点列表,配置为相同的网络名称“net”。这样每个人都可以将文件发送到同一网络中的选定节点。

设计

  • 每个用户 打开蓝牙无线电,然后在应用中输入所需的网络名称
  • PC 上的每个应用程序将通过临时创建的连接(无需配对或用户参与)迭代地与可访问的蓝牙设备通信,检查它们的网络名称并列出具有相似网络名称的可发现 PC
  • 然后它们将在彼此之间共享这些列表,因此一台 PC 知道同一网络中的计算机,即使它们不在范围内。
  • 通过算法解析的路径将文件从一台计算机发送到一台或多台计算机,甚至发送聊天文本。
  • 所有这些都将通过在每个应用程序之间不时建立的简单临时蓝牙连接来实现,除了网络名称之外,不需要配对或身份验证。 (因为我不知道如何使用 C# 创建 Piconets,也不知道如何创建蓝牙路由协议。
  • 未实施其他安全措施。

请让我知道任何其他更好的设计或方式。非常感谢您阅读冗长的文字。还包括任何可以帮助我实现上述目标的有用代码。

【问题讨论】:

    标签: c# networking network-programming bluetooth network-protocols


    【解决方案1】:

    我每天都会进行数十次未配对的连接...我不知道这个谣言是从哪里来的。 :-,)

    正如您在 Android 上所指出的,默认设置是用于经过身份验证的连接——也许这就是谣言开始的地方?正如您所注意到的,即使在那里,也有一些方法可以请求“不需要配对”的连接,例如listenUsingInsecureRfcommWithServiceRecord。

    因此,在 Windows 上的 Microsoft 堆栈中,通过套接字 (winsock) 使用蓝牙 (RFCOMM)。 默认该连接确实需要身份验证(配对),也不需要加密——事实上,要请求身份验证/加密,必须设置一个套接字选项。与 Widcomm 类似,您在创建连接时指定所需的安全级别,可以是“无”。在 Bluetopia 上类似,在 Linux 上的 BlueZ 上类似。

    因此,如果您使用我的库 32feet.NET,只需使用 BluetoothClient 和 BluetoothListener 并设置 cli.Authenticate=true 等 :-)

    一些代码示例

    你的最终目标是什么?我刚刚意识到您在另一个问题中询问文件传输... :-)

    无论如何传输文本...在服务器端有代码如:http://32feet.codeplex.com/wikipage?title=Bluetooth%20Server-side 和客户端如:http://32feet.codeplex.com/wikipage?title=General%20Bluetooth%20Data%20Connections 无论如何,不​​知道你是否知道 .NET 上的 TextWriter/-Reader 子类一方面:

    ....
    var wtr = new StreamWriter(peerStream);
    wtr.WriteLine("hello");
    wtr.Flush();
    

    另一方面:

    ....
    var wtr = new StreamReader(peerStream);
    var line = wtr.ReadLine();
    MessageBox.Show(line);
    

    BluetoothChat 中的代码几乎可以做类似的事情

    艾伦

    【讨论】:

    • 谢谢,这正是我想知道的,你已经解释得很清楚了。我马上试试这个。谢谢
    • 我对创建这个有点困惑,因为我是蓝牙编程的新手,如果可能的话(最好是在 C# 中),你能分享一个简单的代码来完成上述操作(发送文本等)。谢谢。
    • 非常感谢 Allan 提供的代码示例,我正在测试它们。我还编辑了描述我最终目标的问题。我对整个网络和蓝牙编程领域非常陌生,所以请不要介意我在这里和那里提出的令人困惑的问题,因为我现在不知道该寻找什么,因为我缺乏一些技术专长在这个领域首先创建一个合适的设计。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多