0

我正在尝试通过 BLE L2CAP 连接将 Android 手机连接到 golang 服务器,但是我似乎无法成功连接。

我的安卓代码是

val socket = device.createL2capChannel(0x0031)
socket.connect()

我的服务器代码是

        stdout, err := cmd.Output()
        if err != nil {
                panic(err)
        }
        fmt.Println(string(stdout))
        sock, err := unix.Socket(syscall.AF_BLUETOOTH, syscall.SOCK_SEQPACKET, unix.BTPROTO_L2CAP)
        if err != nil {
                panic(err)
        }
        defer unix.Close(sock)

        addr := &unix.SockaddrL2{PSM: 0x0031}
        if err := unix.Bind(sock, addr); err != nil {
                panic(err)
        }

        if err := unix.Listen(sock, 1); err != nil {
                panic(err)
        }

        conn, sender, err := unix.Accept(sock)
        if err != nil {
                panic(err)
        }
        fmt.Printf("connection accepted from %v %v\n", conn, sender)

但是,当我尝试连接时,Android 代码在

E/DartMessenger( 4026): Uncaught exception in binary message listener
E/DartMessenger( 4026): java.io.IOException: read failed, socket might closed or timeout, read ret: -1
E/DartMessenger( 4026):     at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:776)
E/DartMessenger( 4026):     at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:790)
E/DartMessenger( 4026):     at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:415)
E/DartMessenger( 4026):     at com.muxable.flutter.l2cap.Connection.start(L2CAPPlugin.kt:42)
E/DartMessenger( 4026):     at com.muxable.flutter.l2cap.L2CAPPlugin.onMethodCall(L2CAPPlugin.kt:146)
E/DartMessenger( 4026):     at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
E/DartMessenger( 4026):     at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:178)
E/DartMessenger( 4026):     at io.flutter.embedding.engine.dart.DartMessenger.lambda$handleMessageFromDart$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:206)
E/DartMessenger( 4026):     at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/DartMessenger( 4026):     at android.os.Handler.handleCallback(Handler.java:938)
E/DartMessenger( 4026):     at android.os.Handler.dispatchMessage(Handler.java:99)
E/DartMessenger( 4026):     at android.os.Looper.loopOnce(Looper.java:201)
E/DartMessenger( 4026):     at android.os.Looper.loop(Looper.java:288)
E/DartMessenger( 4026):     at android.app.ActivityThread.main(ActivityThread.java:7838)
E/DartMessenger( 4026):     at java.lang.reflect.Method.invoke(Native Method)
E/DartMessenger( 4026):     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/DartMessenger( 4026):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

我实际上已经能够从另一台计算机进行连接,这让我认为存在与协议相关的问题?特别是我无法完全理解如何确保 L2CAP 服务器在 Android 似乎需要的 BLE 上运行。

我可以从另一台机器成功连接

import bluetooth

sock=bluetooth.BluetoothSocket(bluetooth.L2CAP)

bd_addr = "54:8D:5A:96:4E:29"
port = 0x0031

sock.connect((bd_addr, port))

sock.send("hello!!")

sock.close()
4

0 回答 0