tomcat servlet java.net.SocketTimeoutException: Read timed out 解決辦法
最近在整一個拍照上傳,手機通過無線網路上傳照片到伺服器,伺服器端是JAVA寫的servlet;思路是將較大的圖片分塊傳送到伺服器進行拼裝。但發現服務端在讀取圖片資料時候( InputStream.read)多半是java.net.SocketTimeoutException: Read timed out,網路連線並未超時或斷開,伺服器的處理結果都發送給手機端(當然是錯誤訊息);而用WIFI這種錯誤比較少,猜測多半是網路慢引起的資料接收超時。在網上找了好久,好幾天都無結果;實在沒轍了,只是試試強制讀取的辦法,在超時的時候還是去讀,直到資料讀完或者出現網路錯誤為止。改改程式一試,很OK,成功了!將程式碼附上:
//total為資料包大小
swapStream = new ByteArrayOutputStream(total);
int len = buff.length;
if(len > total)
len = total;
while (total>0)
{
//int rc = 0;
try
{
rc = inStream.read(buff, 0,len);
if(rc>0)
{
debuginfo.append("read2 " + rc + " " + System.currentTimeMillis() + " ");
swapStream.write(buff, 0, rc);
total -= rc;
len = buff.length;
if(len > total)
len = total;
}
}
catch(java.net.SocketTimeoutException ste)
{
System.out.println(ste.toString());
}
catch(Exception ste)
{
System.out.println(ste.toString());
break;
}
}