此问题仅发生 Sony Xperia Z (4.4.2)
我正在开发一款安卓音频播放器应用。该应用程序将音频形式的 sdcard 读取为本地服务器。
我制作本地服务器是因为这个音频是加密的并且很大,所以,如果我尝试一次运行完整的音频文件并解密它,那么我需要很长时间运行媒体播放器,这就是为什么我让这个本地服务器来读取这个音频文件的原因。
我的本地服务器 ServerSocket 连接代码。
int SERVER_PORT=35415;
socket = new ServerSocket(SERVER_PORT, 0, InetAddress.getByAddress(new byte[]{127,0,0,1}));
socket.setSoTimeout(5000);
port = socket.getLocalPort();
Socket client = socket.accept(); /// this line give exception Only Sony Xperia Z (4.4.2).
问题是,当我尝试检查套接字是否打开以读取音频 Steam(socket.accept())时,它SocketTimeoutException
每次只在 Sony Xperia Z(4.4.2)而不是其他安卓手机中给出。
我试图解决的问题:::
- 将 socket.setSoTimeout(5000) 增加到 20000。
- 删除 socket.setSoTimeout(5000); 解决问题的代码。
- 将 ServerSocket 端口从“123420”更改为“123440”。
异常日志。
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): SocketTimeoutException
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): java.net.SocketTimeoutException
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:108)
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): at java.net.ServerSocket.implAccept(ServerSocket.java:203)
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): at java.net.ServerSocket.accept(ServerSocket.java:128)
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): at com.magnifo.utility.audio.AudioFileStreamProxy.run(AudioFileStreamProxy.java:98)
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): at java.lang.Thread.run(Thread.java:841)
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): Caused by: libcore.io.ErrnoException: accept failed: EAGAIN (Try again)
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): at libcore.io.Posix.accept(Native Method)
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): at libcore.io.BlockGuardOs.accept(BlockGuardOs.java:55)
08-18 20:18:54.344: E/AudioFileStreamProxy(8594): at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:98)