首页 > 解决方案 > 在 Android 中手动设置蓝牙服务器端口

问题描述

我有一个正在运行的蓝牙服务器(Android 应用程序)。我想为它设置一个特定的蓝牙端口来收听。原因是客户端连接大约需要 10-15 秒,因为它需要首先发现服务器(我进行扫描)。

创建服务器的代码如下:

            BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
            UUID my_uuid = UUID.fromString("12345678-f6ff-4f6f-1f1f-f8f8f8fffff8");
            try {
                BluetoothServerSocket serverSocket = adapter.listenUsingRfcommWithServiceRecord("myBluetoothServer", my_uuid);

                sock1 = serverSocket.accept();
                i_s = sock1.getInputStream();
                o_s = new OutputStreamWriter(socket.getOutputStream());
                new Thread(writter).start();
     ...

问题:如何为服务器指定一个固定的端口号?

当然,我一直在寻找这里,但不容易找到,: https ://developer.android.com/reference/android/bluetooth/BluetoothSocket?hl=ur

我正在寻找类似 serverSocket.setPort(myPortNumber) 的东西(伪代码)

标签: androidbluetoothport

解决方案


蓝牙套接字不存在端口的概念,因为它们不是常规的 TCP/IP 套接字。它们只是被抽象为表现得像一个。

正如您从代码中发现的那样,您指定的是一个 UUID,它是一个服务标识符。连接到蓝牙服务器的过程如下:

  1. 蓝牙设备扫描:你不能跳过这部分,因为你需要一个有效的蓝牙设备对象
  2. 已发现设备的服务发现:这是您“检查”蓝牙设备是否正在运行您正在寻找的服务的部分(您的服务 UUID)所以您也不应该跳过这部分,除非您想连接到所有周围的蓝牙设备。

推荐阅读