问题描述
|
我遇到的情况是我使用BufferedReader
readLine()
从套接字读取数据,但是readline()
读取数据,直到它在Data中找到换行符/返回回车为止。
而且,如果我的数据不包含换行符,则它将继续读取数据,直到找到新行并且入侵者可以注入DOS攻击为止。
甚至套接字也会超时。
我知道一种解决方案可能是我们需要限制行大小并仅读取一些数据,然后将数据追加到缓冲区。
是最佳解决方案还是我可以通过其他方式做到?
我可以重写BufferedReader和重写readLine()方法。这是可行的解决方案吗?
解决方法
使用
Socket.setSoTimeout(int)
从Javadoc引用
以指定的超时时间启用/禁用SO_TIMEOUT,以毫秒为单位。通过将此选项设置为非零超时,与此套接字关联的InputStream上的read()调用将仅在此时间量内阻塞。
如果超时到期,则尽管Socket仍然有效,但将引发java.net.SocketTimeoutException。必须先启用该选项,然后才能执行阻止操作。超时必须大于0。零超时被解释为无限超时。
另请注意,从这一行
必须先启用该选项,然后才能执行阻止操作。
在执行read
操作之前,您必须致电Socket.setSoTimeout(int)
。