0

我正在编写一个测试上传速度连接到服务器的 java 类。我想检查 5 秒内可以发送多少数据。

我编写了一个创建 URL、创建连接并通过 outPutStream 发送数据的类。有一个循环,我将数据写入流 5 秒。但是我无法看到数据何时发送(我将数据写入输出流,但数据尚未发送)。我怎样才能等到数据真正发送到服务器?这是我的代码(不起作用):

URL u = new URL(url)
HttpURLConnection uc = (HttpURLConnection) u.openConnection();
uc.setDoOutput(true);
uc.setDoInput(true);
uc.setUseCaches(false);
uc.setDefaultUseCaches(false);
uc.setRequestMethod("POST");
uc.setRequestProperty("Content-Type", "application/octet-stream");
uc.connect();
st.start();

// Send the request
OutputStream os = uc.getOutputStream();
//This while is incorrect cause it does not wait for data beeing sent
while (st.getElapsedTime() < miliSeconds) {
    os.write(buffer);
    os.flush();
    st.addSize(buffer.length);

}
os.close();

谢谢

4

2 回答 2

1

默认情况下,整个输出流在发送之前会在内存中缓冲。您需要启用分块流模式或固定长度流模式,以便直接写入输出流而无需缓冲。

在这里,添加

HttpURLConnection uc = (HttpURLConnection) u.openConnection();
uc.setChunkedStreamingMode(8192); // <-- enable chunked streaming mode before connecting to server.
于 2011-01-07T12:38:49.947 回答
1

如果你想测量你拥有的真实网络速度,你不应该通过 HTTP 来做,因为你不会考虑协议的开销。您需要的是原始 TCP/IP 中的真正客户端/服务器解决方案。您的服务器侦听一个套接字,然后您向它发送无缓冲的数据。然后你可以让你的措施客户端和服务器端并比较它们。

于 2011-01-07T13:52:18.337 回答