|
|
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
Отправляю данные по сокету. Код: java 1. Если сделать несколько таких отправок в течение короткого промежутка времени, то данные могут прийти на клиент в одном пакете. Либо, если размер данных большой, они разбиваются на несколько пакетов. Как сделать, чтобы данные уходили полностью после вызова write, не объединялись в пакеты и не разбивались? Проблема в том, что данные сжимаются GZIP-ом перед отправкой и когда приходят на клиент их нужно распаковать, но если приходят несколько склеенных GZIP-ов, или разбитых, то распакуется криво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 03:09:46 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 03:38:17 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
mreКак сделать, чтобы данные уходили полностью после вызова write, не объединялись в пакеты и не разбивались? Никак. Это пакетная передача данных. На передающей стороне надо проверять, сколько ушло и при необходимости передавать остаток, на приемной стороне проверять, сколько пришло и при необходимости читать дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 08:32:04 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
mreКак сделать, чтобы данные уходили полностью после вызова write, не объединялись в пакеты и не разбивались?В рамках вашей задачи - close, но не надо так делать.Проблема в том, что данные сжимаются GZIP-ом перед отправкой и когда приходят на клиент их нужно распаковать, но если приходят несколько склеенных GZIP-ов, или разбитых, то распакуется криво.gzip - потоковый алгоритм, у него в принципе нет проблем ни с получением блока по частям ни со склейкой нескольких блоков в один. Что передаёте? Именно поток данных или, всё-таки, жмёте отдельные файлы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 08:32:33 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Строку - XML. Если приходят 2 сжатых XML в одном пакете, при распаковке GZIP, получается только первая. Раньше передавались просто XML с разделителем, по которому я и мог объединять/разделять их. То есть, если XML пришла не полная, жду пока придет символ конца. Потребовалось сжимать данные, потому встала такая проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 10:37:18 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
То есть, по идее, если я 2 строки запаковал gzip и отправил одним куском данных, то при распаковке, он сам объединит их в один, и на выходе должны получиться просто 2 склеенных строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 10:51:31 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
mreРаньше передавались просто XML с разделителем, по которому я и мог объединять/разделять их. То есть, если XML пришла не полная, жду пока придет символ концаТогда close() на передающей стороне и повторный сеанс связи. P.S. Не очень понятно, что мешает просто читать поток данных, не навешивая обработку там, где этого можно не делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 12:35:57 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
На всякий случай перечитал GZIPInputStream.html . Так и не понял, что мешает работать "как раньше", просто надстроив входной поток распаковщиком? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 12:40:57 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
Метод отправки выглядит так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Если здесь все ок, то возможно проблема в чтении на клиенте, там не ява. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 13:13:13 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
mre, Возьмите apache mina , там для пакетирования есть одна встроенная вещь, это когда первые 2 или 4 байта в пакете, содержать длину пакета. Очень удобная вещь (для меня по крайней мере). Мина для того чтоб не играться самому с сокетами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 13:22:21 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
Протестировал сжатие строк (java test > файл.gz) на таком классе: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Второй вариант - записать в сокет данные из gz-файла с нужным содержимым, чтобы исключить "ту сторону". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:05:10 |
|
||
|
Сокеты. Разделение данных на пакеты.
|
|||
|---|---|---|---|
|
#18+
Проблема все-таки в клиенте. Приходит 3 архива в одном пакете, но распаковывается только первый, буду искать как вытащить остальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 23:23:32 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38332042&tid=2128974]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
46ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 283ms |
| total: | 478ms |

| 0 / 0 |
