соединение с Java, дождитесь отправки данных через outputtream - PullRequest
0 голосов
/ 07 января 2011

Я пишу 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();

Спасибо

Ответы [ 2 ]

1 голос
/ 07 января 2011

Если вы хотите измерить реальную скорость вашей сети, вам не следует делать это через HTTP, потому что вы не будете учитывать издержки протокола. Что вам нужно, так это настоящее клиент-серверное решение в необработанном TCP / IP. Ваш сервер прослушивает сокет, и вы отправляете небуферизованные данные на него. Затем вы можете выполнить свои измерения на стороне клиента и сервера и сравнить их.

1 голос
/ 07 января 2011

По умолчанию весь поток вывода буферизируется в памяти перед отправкой.Вам необходимо включить режим потоковой передачи по частям или режим потоковой передачи с фиксированной длиной, чтобы выходной поток записывался напрямую без буферизации.

Здесь добавьте

HttpURLConnection uc = (HttpURLConnection) u.openConnection();
uc.setChunkedStreamingMode(8192); // <-- enable chunked streaming mode before connecting to server.
...