在我的应用程序中,我使用套接字与另一台设备进行通信。我的所有时间都有SocketTimeoutException
。这是我在服务中所做的沟通
这是一个日志:
11-09 08:44:05.029 5458-6647/pl.teminalmobile W/System.err: java.net.SocketTimeoutException: Read timed out
11-09 08:44:05.030 5458-6647/pl.teminalmobile W/System.err: at java.net.SocketInputStream.socketRead0(Native Method)
11-09 08:44:05.031 5458-6647/pl.teminalmobile W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:151)
11-09 08:44:05.031 5458-6647/pl.teminalmobile W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:120)
11-09 08:44:05.031 5458-6647/pl.teminalmobile W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:106)
11-09 08:44:05.032 5458-6647/pl.teminalmobile W/System.err: at pl.teminalmobile.Service.Service22.start1(Service22.java:256)
11-09 08:44:05.032 5458-6647/pl.teminalmobile W/System.err: at pl.teminalmobile.Service.Service22.access$000(Service22.java:75)
11-09 08:44:05.032 5458-6647/pl.teminalmobile W/System.err: at pl.teminalmobile.Service.Service22$19.run(Service22.java:963)
11-09 08:44:05.033 5458-6647/pl.teminalmobile W/System.err: at java.util.TimerThread.mainLoop(Timer.java:555)
11-09 08:44:05.033 5458-6647/pl.teminalmobile W/System.err: at java.util.TimerThread.run(Timer.java:505)
这一行有一个SocketTimeOutException:
while ((bytesRead = inputStream.read(content)) != -1) {
答案 0 :(得分:1)
您的套接字超时意味着从其他设备获取响应需要很长时间,并且您的请求在获得响应之前到期。要解决此问题,您需要提供手动套接字超时,例如搜索如何提供库的套接字超时正在使用。如果使用socket.io,则需要添加
socket.timeout(12000);
这里12000是毫秒,或者如果您使用的是OkHttp客户端,那么您可以添加:
clientBuilder.connectTimeout(60, TimeUnit.SECONDS);
或者您使用的任何套接字库都有手动提供超时的方法,因此只需键入您创建套接字的插槽名称并放置'。'之后,您可以获得搜索超时的可用方法的建议并使用该方法。
以下是库演示的链接用法:
答案 1 :(得分:0)
我遇到了同样的问题,但我通过使用这些方法解决了这个问题
将字符编码设置为UTF-8和charset
答案 2 :(得分:0)
虽然我不完全确定,但我认为您没有正确使用Socket.setSoTimeout()
。
您只应该为Socket requestSocket使用一次。在使用Socket的内容之前尝试在代码的开头使用它,或者通过将代码传递给函数而不是调用函数三次来使代码模块化。根据我的个人经验,这使得Socket.setSoTimeout()
更容易使用。
答案 3 :(得分:0)
我会告诉您已粘贴的代码。
我发现你在第117行和第125行设置时间为3000毫秒,你需要将其最多更改为15秒
requestSocket.connect(new InetSocketAddress(a, 6666), 3000);
希望得到帮助
快乐编码。!