Здравствуйте, Alexandr.Martynov, Вы писали:
AM>есть клиент, который общается с сервером через сокеты, но в ходе разработки возникла задача узнать сколько байт было записано в поток (из-за того что сервер очень не стабилен и периодически отваливается).
Наверное более полезно знать, сколько байт получено на сервере. Запись в поток еще не означает их получение.
есть клиент, который общается с сервером через сокеты, но в ходе разработки возникла задача узнать сколько байт было записано в поток (из-за того что сервер очень не стабилен и периодически отваливается).
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Alexandr.Martynov, Вы писали:
AM>>есть клиент, который общается с сервером через сокеты, но в ходе разработки возникла задача узнать сколько байт было записано в поток (из-за того что сервер очень не стабилен и периодически отваливается).
А>Наверное более полезно знать, сколько байт получено на сервере. Запись в поток еще не означает их получение.
и тот и тот вариант подойдет. Моя задача убедится что информация ушла, а дошла она или нет это проблема скорее администратора сети на стороне клиента.
Re[3]: как узнать сколько байт записано в OutputStream
Здравствуйте, Alexandr.Martynov, Вы писали:
AM>>>есть клиент, который общается с сервером через сокеты, но в ходе разработки возникла задача узнать сколько байт было записано в поток (из-за того что сервер очень не стабилен и периодически отваливается).
А>>Наверное более полезно знать, сколько байт получено на сервере. Запись в поток еще не означает их получение.
AM>и тот и тот вариант подойдет. Моя задача убедится что информация ушла, а дошла она или нет это проблема скорее администратора сети на стороне клиента.
Если работаешь через сокеты, то значит используешь стек TCP. В TCP пакеты или доходят в той же очередности, что и уходили от клиента, или ты в приложении получишь ошибку передачи данных (IOException), если я не ошибаюсь
Re[4]: как узнать сколько байт записано в OutputStream
Здравствуйте, Donz, Вы писали:
D>Здравствуйте, Alexandr.Martynov, Вы писали:
AM>>>>есть клиент, который общается с сервером через сокеты, но в ходе разработки возникла задача узнать сколько байт было записано в поток (из-за того что сервер очень не стабилен и периодически отваливается).
А>>>Наверное более полезно знать, сколько байт получено на сервере. Запись в поток еще не означает их получение.
AM>>и тот и тот вариант подойдет. Моя задача убедится что информация ушла, а дошла она или нет это проблема скорее администратора сети на стороне клиента.
D>Если работаешь через сокеты, то значит используешь стек TCP. В TCP пакеты или доходят в той же очередности, что и уходили от клиента, или ты в приложении получишь ошибку передачи данных (IOException), если я не ошибаюсь
в том-то и дело что ошибок никаких не выскакивает, а вот в момент вызова функции read все зависает
...
sock.setSoTimeout(0);
...
InputStream in = sock.getInputStream();
byte[] c = new byte[1];
in.read(c); //дальше программа не выполняется и текст "Done." на экран не выводится.
System.out.println("Done.");
in.available(); всегда возвращает 0.
собственно поэтому и хочу узнать а было ли что-то записано.
P.S. никакой возможно посмотреть что творится на сервере у меня нет
Re[5]: как узнать сколько байт записано в OutputStream
AM>в том-то и дело что ошибок никаких не выскакивает, а вот в момент вызова функции read все зависает
AM>
AM>...
AM>sock.setSoTimeout(0);
AM>...
AM>InputStream in = sock.getInputStream();
AM>byte[] c = new byte[1];
AM>in.read(c); //дальше программа не выполняется и текст "Done." на экран не выводится.
AM>System.out.println("Done.");
AM>
AM>in.available(); всегда возвращает 0.
AM>собственно поэтому и хочу узнать а было ли что-то записано.
AM>P.S. никакой возможно посмотреть что творится на сервере у меня нет
То что "зависает" на методе read говорит только о том что в твоем InputStream ничего нет, т.е. сервер ничего тебе не посылает.
Саиый простой способ протестировать твой сокет — создать локально(на своей же машине или на какой то машине во внутренней сети) свой сервер и отладить работу сокетов на нем.
Еще такое соображение. Насколько я помню, если сокет "отваливается" на стороне сервера, то клиент не уведомляется. Он будет благополучно висеть в своем треде на методе read и ждать ответа. Я выходил из подобной ситуации таким образом — устанавливал время тайм аута sock.setSoTimeout(nt); и через промежутки времени меньше nt посылал контрольный сигнал. если в течение установленного времени ответа на контрольный сигнал не было — закрывал сокет у клиента и устанавливал новое соединение.