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句柄的线程.另一个线程可以在某个超时被阻止后异步关闭该通道.

上一篇:云计算之路-阿里云上:2014年6月11日17点遇到的CPU 100%状况


下一篇:boost::asio译文