【问题标题】:Manually set bluetooth server port in Android在 Android 中手动设置蓝牙服务器端口
【发布时间】:2018-08-17 13:39:04
【问题描述】:

我有一个正在运行的蓝牙服务器(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)(伪代码)的东西

【问题讨论】:

    标签: android bluetooth port


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。也许我不清楚。问题是由于设备已配对,如果我知道端口(我手动测试它),我实际上可以直接将客户端连接到服务器,并且假设我知道服务器的 BLE MAC 地址。你看到这个主意了吗?
    • 正如我之前所说,蓝牙服务器没有端口之类的东西。如果您已经拥有要连接的相关蓝牙设备,那么您需要做的就是:developer.android.com/reference/android/bluetooth/…,如您链接的文档中所述。
    • 另外,你应该知道,从 API 23 开始,蓝牙设备的 MAC 地址是随机的,所以你不应该依赖它。
    • 我听到你说的话,但是当你显示所有不匹配的服务时,有一个叫做“端口”的东西,例如:
    • {'description': '', 'handle': 65549, 'host': '00:00:00:00:00:00', 'name': b'OBEX Object Push\ x00', 'port': 12, 'profiles': [(b'1105', 256)], 'protocol': 'RFCOMM', 'provider': 无,
    猜你喜欢
    • 2011-03-19
    • 2018-01-01
    • 2015-06-14
    • 2011-12-15
    • 2016-07-28
    • 2013-06-21
    • 2013-08-14
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多