Android Bluetooth:java.io.IOException:recvmsg期间出现意外错误或截断

Android Bluetooth:java.io.IOException:recvmsg期间出现意外错误或截断,java,android,bluetooth,Java,Android,Bluetooth,尝试在基于的Android上实现蓝牙SSP服务器 主要的区别是我一直在服务器蓝牙套接字上调用accept来接受额外的连接。每当accept返回套接字时,我就启动一个新线程,将一个字节写入输出流,从输入流读取一个字节,并关闭客户端套接字 使用32feet.NET包制作了一个小型C控制台应用程序,使用该服务循环并向运行在Android上的蓝牙服务器发出顺序请求 结果-在大约900个成功请求后,Android代码崩溃,出现以下异常: java.io.IOException: Unexpected er

尝试在基于的Android上实现蓝牙SSP服务器

主要的区别是我一直在服务器蓝牙套接字上调用accept来接受额外的连接。每当accept返回套接字时,我就启动一个新线程,将一个字节写入输出流,从输入流读取一个字节,并关闭客户端套接字

使用32feet.NET包制作了一个小型C控制台应用程序,使用该服务循环并向运行在Android上的蓝牙服务器发出顺序请求

结果-在大约900个成功请求后,Android代码崩溃,出现以下异常:

java.io.IOException: Unexpected error or truncation during recvmsg()
at android.net.LocalSocketImpl.readba_native(Native Method)
at android.net.LocalSocketImpl.access$400(LocalSocketImpl.java:33)
at android.net.LocalSocketImpl$SocketInputStream.read(LocalSocketImpl.java:98)
at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:568)
at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:547)
at android.bluetooth.BluetoothSocket.accept(BluetoothSocket.java:457)
at android.bluetooth.BluetoothServerSocket.accept(BluetoothServerSocket.java:131)
at android.bluetooth.BluetoothServerSocket.accept(BluetoothServerSocket.java:117)
at com.example.david.experimentations.AcceptThread.run(AcceptThread.java:39)
尝试在Galaxy S5安卓4.4.2和Nexus 7上运行同一台服务器,结果相似。我一定是在做一些愚蠢的事情,比如没有适当地释放资源,但我不确定是什么。有什么办法防止撞车吗

注意:AcceptThread在主活动中单击按钮后启动。在前面提到的崩溃发生之前,我可以任意多次启动线程。但是,崩溃后,尝试调用BluetoothAdapter.createNewRfcommSocketAndRecord的结果是java.lang.NullPointerException:FileDescriptor不能为null

链接到来源:

您应该在此处发布代码,而不是作为链接发布,但您的代码结构很差。例如,在accept循环中,启动线程的代码取决于previoustry块中accept调用的成功与否。因此,它应该在try块中。蓝牙API发出了另一条糟糕的错误消息。流连接不应将截断作为错误条件。@EJP-代码与我喜欢的官方示例几乎相同,主要区别在于accept返回时不会中断。我知道这不是编写糟糕代码的借口,但它仍然不能解释为什么经过大约950多次迭代后失败。聊天室里有人建议我试试早期的Android版本,我会试着去弄姜饼看看它是否有什么不同。关于粘贴代码-在这里放这么多代码可以接受吗?我链接了,不喜欢: