小编Fio*_*ona的帖子

如果Android蓝牙服务器套接字处理多个连接,它将在accept()上被阻止

我研究了android蓝牙的例子.
令我感到困惑的是,其他设备已发送连接请求,并且如果以前的连接存在,服务器只是被阻止了很长时间而没有被接受.

是否有可能执行服务器套接字并接受许多连接而不仅仅是一个连接的Android设备?是否有任何原因可能导致被accept()阻止的服务器,例如,错误的UUID或类似的东西?

我做的操作如下,

  1. 对于第一次连接,请创建服务器套接字并等待连接
  2. 客户端B发送连接请求
  3. 服务器套接字接受
  4. 处理i/o流
  5. 使用相同的serversocket再次等待连接(我不关闭serversocket)
  6. 客户端C发送连接请求
  7. 服务器套接字被阻止,阻止,阻止,而不是被接受...

因为第一个连接成功,我不会在第二个连接上更改UUID.所以我认为UUID不是关键.建立第一个连接后,服务器套接字将等待另一个连接.可悲的是,它只是等待和阻止,不接受作为第一个连接.

public void run() {
    if (D) Log.d(TAG, "BEGIN ServerSocketThread" + this);
    BluetoothSocket socket = null;
    while(true) {
        try {
            Log.i(TAG, "[ServerSocketThread] Enter while loop");
            socket = mmServerSocket.accept();                                     
            Log.i(TAG, "[ServerSocketThread] Got client socket");                    
        } catch (IOException e) {
            Log.e(TAG, "accept() failed", e);
            break;
        }

        if (socket!=null) {
            synchronized (BluetoothConnService.this) {                       
                Log.i(TAG, "[ServerSocketThread] "+socket.getRemoteDevice()+" is connected.");
                ConnectedThread tmpThread = new ConnectedThread(socket); 
                tmpThread.start();
                break;
            }
        }

    }   
    BluetoothConnService.this.startSession();
}
Run Code Online (Sandbox Code Playgroud)

它是服务器套接字线程的一部分.每当我想进行第二次连接时,logcat显示它将在日志" [ServerSocketThread] …

android bluetooth serversocket

6
推荐指数
1
解决办法
3239
查看次数

标签 统计

android ×1

bluetooth ×1

serversocket ×1