gpt4 book ai didi

Android:蓝牙获取端口号失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:51:09 25 4
gpt4 key购买 nike

我在我的应用程序中使用蓝牙时遇到问题。似乎在创建了 28 个 BluetoothSocket/BluetoothServerSockets 之后,所有的端口都被占用了。 socket 不需要同时打开,启用蓝牙后只有28个 socket 。

这可以使用 Android Samples 中提供的 BluetoothChat 示例进行复制.只需打开和关闭应用程序 15 次(应用程序每次创建 2 个套接字)。第 15 次,它会崩溃并会继续崩溃,直到您禁用然后重新启用蓝牙:

12-06 18:43:58.177: E/BluetoothSocket(18530): bindListen, fail to get port number, exception: java.io.IOException: read failed, socket might closed, read ret: -1
12-06 18:43:58.193: E/BluetoothChatService(18530): Socket Type: Insecurelisten() failed
12-06 18:43:58.193: E/BluetoothChatService(18530): java.io.IOException: Error: -1
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.bluetooth.BluetoothAdapter.createNewRfcommSocketAndRecord(BluetoothAdapter.java:1035)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.bluetooth.BluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(BluetoothAdapter.java:982)
12-06 18:43:58.193: E/BluetoothChatService(18530): at com.example.android.BluetoothChat.BluetoothChatService$AcceptThread.<init>(BluetoothChatService.java:280)
12-06 18:43:58.193: E/BluetoothChatService(18530): at com.example.android.BluetoothChat.BluetoothChatService.start(BluetoothChatService.java:119)
12-06 18:43:58.193: E/BluetoothChatService(18530): at com.example.android.BluetoothChat.BluetoothChat.onResume(BluetoothChat.java:131)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1185)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.app.Activity.performResume(Activity.java:5182)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.app.ActivityThread.access$600(ActivityThread.java:141)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.os.Looper.loop(Looper.java:137)
12-06 18:43:58.193: E/BluetoothChatService(18530): at android.app.ActivityThread.main(ActivityThread.java:5039)
12-06 18:43:58.193: E/BluetoothChatService(18530): at java.lang.reflect.Method.invokeNative(Native Method)
12-06 18:43:58.193: E/BluetoothChatService(18530): at java.lang.reflect.Method.invoke(Method.java:511)
12-06 18:43:58.193: E/BluetoothChatService(18530): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-06 18:43:58.193: E/BluetoothChatService(18530): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-06 18:43:58.193: E/BluetoothChatService(18530): at dalvik.system.NativeStart.main(Native Method)

有什么方法可以在套接字关闭后释放端口吗?

最佳答案

我可以在我这里的设备上验证这个行为;尽管以相同方式崩溃所需的次数因设备而异(我认为运行 4.2 的 Galaxy Nexus 需要 20-25 次),因此可用的端口句柄数量似乎有所不同。我还可以提供信息,说明问题不是示例应用程序(或您的应用程序)中的内存泄漏,因为所有 BluetoothSocket 实例都已被 Dalvik 释放和关闭。此处列出的步骤仅测试 BluetoothServerSocket 上的问题,因此不清楚问题是否与此相关,尽管这似乎不太可能。

至少在我的设备上,在切换蓝牙适配器的状态之前,您甚至无法再次启动应用程序,因此问题肯定出在堆栈连接的底层管理上。

我会在此处提交一个包含重现步骤的错误 http://b.android.com我很乐意投票。

关于Android:蓝牙获取端口号失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13754848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com