2012-10-30 54 views
1

我寫了一個應用程序來測試一個servlet的性能。 我寫的代碼可以很好地處理一些請求。 如果我增加到更多的連接,那麼有些時候我會得到「寫入太多字節」的異常。寫了太多的字節 - HttpsURLConnection

int startRange = 0, endRange = 10000; 
HttpsURLConnection c = null; 

c = getHttpsConnection(URL); 
c.setDoInput(true); 
c.setDoOutput(true); 
c.setRequestProperty("Content-Length",(cotentLength+1)); 
c.setFixedLengthStreamingMode(contentLength+1); 
c.setRequestProperty("Content-Type","appplication/zip"); 
c.setRequestMethod("POST"); 
c.setRequestProperty("Content-Range", "bytes "+startRange+"-"+endRange+"/"+filesize); 

OutputStream op = c.getOutputStream(); 

我計算固定塊發送到byte[] partBuf = new byte[contentLength+1];

然後

op.write(partBuf) 
String range = c.getHeaderField("Range"); 

in.close(); 
op.flush(); 
op.close(); 

我不明白「太多的字節寫入錯誤」高達某些請求發送, 傳送太多要求給我這個錯誤有時只有.. 我如何處理這種情況?

通常用於測試,我產生了一些不同的請求,從10,100,500,1000變化..它intut命中一個接收數據塊的servlet。

回答

1

您的示例代碼中存在大量錯字,因此您不清楚真實代碼的作用。然而,這看起來非常錯誤:

c.setRequestProperty("Content-Range", startRange-endRange/filesize); 

該標頭的內容應該是一個字符串,但你似乎正在發送一個整數值。以下是HTTP 1.1規範中標頭應該爲的示例。

HTTP/1.1 206 Partial content 
    Date: Wed, 15 Nov 1995 06:25:24 GMT 
    Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT 
    Content-Range: bytes 21010-47021/47022 
    Content-Length: 26012 
    Content-Type: image/gif 

你編輯的版本仍然不正確。它應該是這樣的:

c.setRequestProperty("Content-Range", 
        "bytes " + startRange + "-" + endRange + "/" + filesize); 

...假設這些變量具有適當的值。


現在你有固定的那些錯誤,我懷疑的下一個點是值本身......而contentLength值。

如果這不是答案,請考慮服務器或servlet不支持POST的「Content-Range」的可能性。

+0

there ..我編輯並修復了我的錯字。請告訴我可以做些什麼來修復它? –

+0

它是否與我打開連接的方式有關,我應該在類中創建連接成員數據併爲每個線程的每個請求重複使用相同的連接? –

+0

是的,請忽略錯字..測試應用程序運行良好.. 完整的程序有這些東西,因爲我已經提到過。請告訴我解決方案。 –

0

您設置了錯誤的內容長度值。根本沒有必要設置它:Java爲你做。只需刪除代碼。

+0

我試過這個,即使那樣我得到這個錯誤。每個線程都會嘗試上傳以30KB爲單位發送的1MB文件,因此每發送一個30KB的塊時,都會打開一個連接,然後斷開其連接。 –