即使使用蓝牙,您也可以创建客户端-服务器应用程序。这里有一个BluetoothSocket
阅读http://developer.android.com/reference/android/bluetooth/BluetoothSocket.html
现在,假设您有两个设备:
- 设备 A
- 设备 B
并假设设备A向设备B发送数据,您没有说设备B是否也在向设备A发送数据,所以我将描述A发送给B的第一种情况。
因此,在这种情况下,由于所有数据都存储在设备 A 中,并且您希望将其发送到设备 B,因此将设备 A 创建为 BluetoothServer 并将设备 B 创建为侦听服务器的 BluetoothClient 会更合理。
但是..如果您希望两个设备都交换数据..您可以将其中一个作为服务器,并为每个设备创建 2 个线程:
- 发送数据的线程
- 监听数据的线程
所以他们两个可以交换数据..
另一件事..如果您曾经编写过常规客户端服务器,您会注意到该accept()
方法会阻塞,直到有客户端连接到服务器..蓝牙客户端-服务器应用程序也是如此。
总结:
一个设备将充当服务器 - 因此您需要编写一个服务器项目并将
其安装在第一台设备上
第二台设备将充当客户端 - 因此您需要编写一个客户端项目并将其安装在第二台设备上
不要忘记在两个
项目的清单文件中添加蓝牙权限。
这两个项目都需要与您在问题中提到的相同的 UUID。简而言之,双方都需要 UUID,因此他们每个人都知道与谁通信我认为它更像是常规客户端服务器中的端口。我在某处读到了用于 RFC 通信的地方。你可能知道有
一些蓝牙协议,如 RFC、SDP 等。
编辑:
在大多数手机中,当您想通过蓝牙发送数据时,都有一个配对过程。因此,如果您不想使用客户端服务器版本,我认为您可以这样做:
- 您的应用程序将搜索要连接的设备。(配对过程)
- 配对后,您已连接到另一台设备并发送数据
编辑 2:
您想将数据从 A 发送到 B 对吗?我会解释得更清楚..
当您说客户端应该知道谁是服务器并且需要插入服务器的端口和IP时,您是对的,这是正确的并且以这种方式工作。
现在,看..
服务器侦听来自客户端的连接,当连接建立时,通信开始。
- 客户要求数据
服务器处理客户端请求并将相关数据发送给他
所以任何数据,如:文件、数据库都应该存储在服务器端。
现在在您的情况下,您要发送的文件位于设备 A 而不是设备 B,因此,如果设备 A 是服务器,他将侦听连接..当设备 B 连接到服务器(设备 A)时,通信开始.. 设备 B 可以向设备 A 请求文件。此外,由于设备 A 是服务器,他甚至可以广播消息.. 意味着向连接到他的所有客户端发送相同的消息。
但是你想要做的是发送文件,即使设备 b 没有要求它,对吧?我不明白您是否希望设备 B 也将文件发送到设备 A,所以让我们将其划分
为场景:
只是设备A发送给B:在这种情况下,由于文件位于设备A,意味着设备A有数据,设备A是服务器,设备B是客户端。因此,当建立连接时,您可以从 A 发送到 B。
两台设备都交换数据:在这种情况下,两台设备都应该互相监听,但只有一个应该充当服务器,另一个充当客户端。意味着您需要在其中一个上安装 serverApp,在另一个上安装 clientApp。但是他们每个人都可以发送和收听其他人。所以对于每个你需要创建处理发送数据的线程和另一个处理接收数据的线程