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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章