1. 程式人生 > >tomcat servlet java.net.SocketTimeoutException: Read timed out 解決辦法

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;
                    }                   
                }