【问题标题】:BluetoothServerSocket: how to handle subsequent connectionsBluetoothServerSocket:如何处理后续连接
【发布时间】:2013-06-21 21:52:57
【问题描述】:

我需要开发一个允许设备不时进行通信的应用程序(一个设备发送简单消息,另一个设备发送响应)。

这种通信不会经常发生(几分钟一次),因此在设备之间保持永久连接似乎不合理。此外,连接可能由于某种原因丢失,所以我需要某种恢复逻辑。

相反,我希望应用在每次需要向对等方发送数据时建立新连接。但是,规范说,BluetoothServerSocket.accept 返回后,服务器套接字应该关闭。这意味着该应用将不再能够接收后续传入的连接。

目前我正在考虑不关闭服务器套接字并以同步方式处理传入连接,以便应用程序在处理并关闭前一个连接之前不会尝试接受新连接。如果另一个对等方在此类处理过程中尝试连接会发生什么?它会失败还是阻塞,直到服务器准备好接受它?

【问题讨论】:

    标签: android bluetooth


    【解决方案1】:

    文档说“BluetoothServerSocket 可以(并且应该)被丢弃,除非你想接受更多的连接。”既然你想接受更多的连接,那么你应该保持它。

    文档还对 ServerSocket 的 accept 方法进行了如下说明。 接受是一个阻塞调用。当连接被接受或发生异常时,它将返回。仅当远程设备发送的连接请求的 UUID 与在此侦听服务器套接字中注册的 UUID 匹配时,才接受连接。成功后,accept() 将返回一个已连接的 BluetoothSocket。

    【讨论】:

    • 我已经测试了我最初的想法(永久服务器套接字 + 同步处理)。它似乎正在工作:传入连接等待轮到他们被接受。但是,有时客户端套接字无法连接(超时?),其中一个设备甚至在等待时以某种方式解除绑定。
    • 看来我必须为每个对等设备创建一个单独的服务器套接字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2013-07-02
    • 2013-03-15
    相关资源
    最近更新 更多