Re[5]: как узнать сколько байт записано в OutputStream
От: victa  
Дата: 28.09.06 16:40
Оценка:
Здравствуйте, Alexandr.Martynov, Вы писали:


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 посылал контрольный сигнал. если в течение установленного времени ответа на контрольный сигнал не было — закрывал сокет у клиента и устанавливал новое соединение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.