微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java / groovy套接字写入超时

我有一个简单的行为不端的服务器(用Groovy编写)

ServerSocket ss = new ServerSocket(8889);
Socket s = ss.accept()
Thread.sleep(1000000)

我想超时的客户端(因为服务器没有使用它的输入)

Socket s = new Socket("192.168.0.106", 8889)
s.setSoTimeout(100);
s.getoutputStream.write( new byte[1000000] );

但是,此客户端将永远阻塞.如何使客户端超时?

谢谢!!

解决方法:

您可以在其自己的线程中生成客户端,并在其上旋转锁/等待(超时时间长)以返回.如果Socket成功,则可能使用Future对象获取返回值.

我确实相信,套接字的SO_TIMEOUT设置只会影响从套接字的read(..)调用,而不会影响写入.

您可以尝试使用SocketChannel(而不是Stream),并生成一个具有该Channel句柄的线程.另一个线程可以在某个超时被阻止后异步关闭该通道.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐