我读到在通过蓝牙进行任何通信之前必须先配对,但我想知道,
我可以创建一个应用程序来读取文本吗? 由另一个蓝牙应用广播而无需配对。
因为我们可以看到一个设备周围其他蓝牙设备的名称。那么我们不能将蓝牙 radio 设置为可以读取任何蓝牙广播文本消息的状态。
示例:在 android 中有 createInsecureRfcommSocketToServiceRecord() 和 listenUsingInsecureRfcommWithServiceRecord() 但在 C# for windows 中没有这样的吗?
谢谢
我的终极目标 :-)
正在创建一个在 Windows 7 PC 上运行的应用程序,该应用程序为对等文件传输和聊天创建即时蓝牙网络
场景
有一群人,每个人的每台电脑上都有这个应用程序,其中一个人想与其他人共享一个文件(可能是电子书、PDF 或任何东西)。他在他的应用程序配置中设置了他的网络“net”(或任何其他名称),其他人也在每个应用程序上使用相同的名称。最后,每个用户都可以在他们的应用程序显示中看到他们周围的其他蓝牙节点列表,配置为相同的网络名称“net”。这样每个人都可以将文件发送到同一网络中的选定节点。
设计
- 每个用户仅打开蓝牙 radio ,然后在当时的应用中输入所需的网络名称
- PC 上的每个应用程序将通过临时创建的连接(无需配对或用户参与)反复与可访问的蓝牙设备通信,检查它们的网络名称并列出具有相似网络名称的可发现 PC
- 然后他们将在彼此之间共享这些列表,这样一台 PC 就知道同一网络中的计算机,即使它们不在直接范围内也是如此。
- 通过算法解析的路径将文件从一台计算机发送到一台或多台计算机,甚至发送聊天文本。
- 所有这些都将通过不时在每个应用程序之间建立的简单的临时蓝牙连接来实现,除了网络名称外,不需要配对或身份验证。 (因为我不知道如何使用 C# 创建 Piconets,或者如何创建蓝牙路由协议(protocol)。
- 未实现其他安全措施。
请让我知道任何其他更好的设计或方式。非常感谢您阅读冗长的文字。还包括任何可以帮助我实现上述目标的有用代码。
最佳答案
我每天都会建立几十个未配对的连接……我不知道这个谣言是从哪里来的。 :-,)
正如您在 Android 上注意到的那样,默认情况下是用于经过身份验证的连接——也许这就是谣言的来源?即使在那里,正如您所注意到的,也有一些方法可以请求“不需要配对”连接,例如listenUsingInsecureRfcommWithServiceRecord。
因此,在 Windows 上的 Microsoft 堆栈中,通过套接字 (winsock) 使用蓝牙 (RFCOMM)。 默认,连接不需要需要身份验证(配对),也不需要加密——事实上,要请求 auth/enc,必须设置一个套接字选项。与 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# - 在 2 台 Windows 7 计算机上使用 C# 蓝牙发送/接收文本而无需配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017716/