Java TCP套接字随机抛出SocketException:sendto失败:EBADF(错误的文件描述符)
我的应用程序中有一个TCP套接字。此时它唯一的功能是定期发送一个数据包以保持与服务器的连接。成功连接后,我的循环是:Java TCP套接字随机抛出SocketException:sendto失败:EBADF(错误的文件描述符),java,android,sockets,tcp,Java,Android,Sockets,Tcp,我的应用程序中有一个TCP套接字。此时它唯一的功能是定期发送一个数据包以保持与服务器的连接。成功连接后,我的循环是: while (running) { outputStream.write(0x00); outputStream.flush(); Thread.sleep(5000 + random.nextInt(5000)); } 但是,write方法有时明显随机抛出以下异常: java.net.SocketException: sendto failed: EB
while (running) {
outputStream.write(0x00);
outputStream.flush();
Thread.sleep(5000 + random.nextInt(5000));
}
但是,write
方法有时明显随机抛出以下异常:
java.net.SocketException: sendto failed: EBADF (Bad file descriptor)
at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:542)
at libcore.io.IoBridge.sendto(IoBridge.java:511)
at java.net.PlainSocketImpl.write(PlainSocketImpl.java:500)
at java.net.PlainSocketImpl.-wrap1(PlainSocketImpl.java)
at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:266)
at java.io.OutputStream.write(OutputStream.java:82)
at libcore.io.Streams.writeSingleByte(Streams.java:53)
at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:262)
at myapp.Service$TCPClient.run(Service.java:174)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.ErrnoException: sendto failed: EBADF (Bad file descriptor)
at libcore.io.Posix.sendtoBytes(Native Method)
at libcore.io.Posix.sendto(Posix.java:211)
at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:278)
at libcore.io.IoBridge.sendto(IoBridge.java:509)
... 8 more
我无法复制错误,它只是偶尔发生。在下一次迭代中,服务器成功地发送和接收数据包。始终建立连接
这是什么原因造成的?如何修复?这是Android平台中的一个错误。@EJP您能提供一些源代码吗?我在AOSP问题跟踪程序中没有看到任何内容。