Цитата:
|
Угу. Размер пакета вычисляется неправильно на стороне сервера. Правильный размер 1 + 1 + (2 + 4 * 1) = 8 байт. Формат записи writeUTF описан в javadoc.
|
Вы немного не правы. В данном случае да, размер оказался 8 байт. Но это не всегда так. Например, если записать на форуме вместо "test" слово "тест", то каждый символ будет занимать уже по 2 байта, ибо это кириллица в юникоде. Вики пояснила это тем, что лишний байт для представления латиницы просто не используется, дабы не хавать лишнюю память. Снова не понятно, что делать, ибо реализация аналога sizeof
монстроподобна.
Цитата:
|
А вообще порекомендую еще не руками вычислять размер "сообщения", а формировать сообщение и брать его размер.
|
Планировалось, что этим будет заниматься класс, в который я оберну работу с сокетом и буфером, поскольку быстро найти инфу по этому поводу не удалось, а желания копать не было=)
Цитата:
|
Учтите, что socket.read изменяет socket.available!
|
Да, это учитывалось, байт размера не учитывался.
Цитата:
|
И на будущее рекоменду в случае проблем трейсить также и все приходящие (считываемые) данные. Вы бы заметили, что пакет меньше, чем написано.
|
Учту на будущее.
Из-за двойного стандарта по строкам и символам вижу 2 пути:
1. Проверять, в каком диапазоне символ и, по результатам проверки, считать 1 или 2 байта.
2. Сделать или найти аналог функции sizeof из цпп и использовать его для того, чтобы записать размер строки в байтах. Тут придется привести к двухбайтовому числу этот самый размер(хотя это не проблема, на java точно).
Может что-нибудь посоветуете? Ибо получается слишком "обернутая обертка", простите за тавтологию, т.е. надстройка над надстройков.