日期:2014-05-17  浏览次数:20849 次

如何解决java.net.SocketTimeoutException: Read timed out这个问题?
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException{
ByteArrayOutputStream out = null;
String result = null;
try{
  InputStream in = request.getInputStream();
out = new ByteArrayOutputStream();

byte[] buffer = new byte[4096];
int len;
while ((len=in.read(buffer, 0, buffer.length))>-1){ 这句报错!!!
try {
out.write(buffer, 0, len);
} catch (Exception e) {
}
}
out.flush();

result = new String(out.toByteArray(),"utf-8");
}catch(Exception Ex){
//logger.error("",e);
}finally{
if (out!=null) out.close();
if (in!=null) in.close();
}

执行到上面那行代码时,报以下错误:
java.net.SocketTimeoutException: Read timed out

而我在本机测试了N次都没出现,放到生产环境后就偶尔会出现。并且我在生产环境上测试时也没出现,咋搞?

------解决方案--------------------
while ((len=in.read(buffer, 0, buffer.length))>-1)
你这又是何必呢
反正都是读满为止
while ((len=in.read(buffer))>-1){
------解决方案--------------------
修改成"while ((len=in.read(buffer))>0){ "
这个还不可以????
------解决方案--------------------
1、来考虑下网络情况
2、生产环境与开发环境的配置是否不同等等
------解决方案--------------------
你的客户端代码可能有问题。