2012-10-30 24 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的块时,都会打开一个连接,然后断开其连接。 –