"
client有如下伪代码:
<code class=""java"">try{ Socket ss = new Socket(); ss.connect(new InetSocketAddress(127.0.0.1, TCPServer.LISTEN_PORT), 4000); ss.setSoTimeout(5000);
//dosomthing
InputStream is = ss.getInputStrean();
log.info("read start time:" + System.currentTimeMillis())
int r = is.read(....);
log.info("read start time:" + System.currentTimeMillis())
} catch(Exception e){ log.info("throw exception time:" + System.currentTimeMillis()); }
上面这样的逻辑,ss.setSoTimeout(5000);
把读超时设置为5000
ms,可经过测试read
的时间也不过才619
ms 就抛出了如题的异常?
这是服务端是同步通知,时间过长,把服务端修改成异步的即可
######这个timeout,并不是触发的你setSoTimeOut(5000)的异常。我的理解是soTimeOut是整个Socket建立连接的最长超时时间,如果你之前connect 没有TimeOut,Read 没有TimeOut,Write 也没有TimeOut,但是你的socket仍然没有得到关闭,当时间超过SoTimeOut的时候,就会抛出异常。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。