最近在整一個拍照上傳,手機通過無線網絡上傳照片到服務器,服務器端是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;
}
}