【问题标题】:How to accept more than one connections with Android BluetoothServerSocket?如何接受与 Android BluetoothServerSocket 的多个连接?
【发布时间】:2013-04-08 02:11:18
【问题描述】:

我正在制作一个 Android 应用程序,其中一个服务器必须与多个客户端共享数据,一个客户端访问来自多个服务器的数据。问题是客户端可以使用 connect() 连接到多个服务器,但服务器一次不会接受多个连接。我已经阅读了developers.android 上的蓝牙页面,并从那里获取了以下内容

与 TCP/IP 不同,RFCOMM 一次只允许每个通道连接一个客户端,因此在大多数情况下,在接受连接的套接字后立即在 BluetoothServerSocket 上调用 close() 是有意义的。

那么有没有办法在 BluetoothServerSocket 上接受多个客户端或从服务器端建立多个 RFCOMM 或解决这个问题。

【问题讨论】:

    标签: android bluetooth


    【解决方案1】:

    我认为我遇到了类似的问题,并尝试通过为每个连接使用单独的 UUID 为我想要接受的每个连接创建单独的 ServerSocket。我猜这让每个 ServerSocket 都在不同的 RFCOMM 通道上监听。

    【讨论】:

      【解决方案2】:

      恕我直言,没有必要使用不同的 UUID 创建多个 BluetoothServerSockets。每当建立连接时,让另一个线程处理socket.getOutputStream(),但在主线程中使用相同的BluetoothServerSocket 继续接受/侦听。

      在android参考页面here

      accept () 阻塞直到建立连接。连接成功时返回一个已连接的 BluetoothSocket。

      本次调用返回后,可再次调用以接受后续 传入连接。

      我找到了一个很好的例子here

      【讨论】:

      • 不是每个UUID只有一个通道吗?因此,如果每个通道只接受客户端,那么每个客户端需要不同的 UUID?此外,您发现的“好例子”似乎处理“常规”TCP/IP 套接字,它们的工作方式与蓝牙套接字不同。如 Android 文档中所述,每个通道允许多个客户端:“与 TCP/IP 不同,RFCOMM 一次只允许每个通道一个连接的客户端(...)”
      猜你喜欢
      • 2014-09-14
      • 1970-01-01
      • 2012-07-10
      • 2011-06-28
      • 2011-01-09
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      相关资源
      最近更新 更多