![]() |
Что можно принять с socket server'a ?
Собственно суть вопроса присутствует в названии темы, что можно принять с socket сервера ( картинки,exe,видео и т.п.)?
Интересует возможно ли получить от сервера не ссылку на картинку, а уже целую картинку? и хотелось бы приведенный пример увидеть глазком) |
|
С сокета принимается набор байтов. Значит, всё что можно упаковать в набор байтов - можно передать. А в компьютере вообще то всё набор байтов: и мп3 файл, и картинка, и крякнутый инсталлятор симс4, который так хочет моя девушка.
|
Вопрос не в том что принять, а в том как прочитать.
На низком уровне сокет представлен как файл(очень грубое сравнение, но понять поможет). Сервер в этот файл постоянно пишет. Клиент постоянно читает. Флеш устроен таким образом что "непрерывное чтение" оставляет на совести виртуальной машины. И выдает данные порционно в прогресс-ивенте. Но суть от этого не меняется - это файл в который мы пишем, и из которого читаем. Хочу заметить: это ОДИН ФАЙЛ. А не по файлу на каждое сообщение. И на совести разработчика - как он порежет этот файл на части. По-умолчанию "\x00" - в качестве разделителя сообщений считается. Но не везде конает, так как не все серверные платформы по-умолчанию этот байт в конец дописывают и тогда надо резать месаджи самим руками. Короче. 1. Получили прогресс-ивент с сокета. Это значит в нашем файле сокета появились новые данные и мы начали их читать. 2. Начали читать из сокета и писать в буфер. 3. Каким-то образом поняли что получили полный месадж. 4. Когда поняли что к нам пришло(обычно мы заранее знаем что к нам придет) - распарсили как-то, известным методом. Понятно что картинку и текст парсить по-разному надо. |
Цитата:
|
Ну, я всегда пишу в начало сообщения его длину. Если длина уж очень переменная – гоняем то "Hello world!", то режисёрскую версию кинокартины "Начало" – тогда я бы сначала писал длину длины, потом собственно длину, потом само сообщение.
Типа, первый байт – количество байтов, отведенных под длину сообщения (например, там лежит число три). Далее – n байтов для длины сообщения (в моём примере это три, т.е. сообщение в этом примере не больше, чем 2^24) Потом само сообщение, собственно. |
длина длины это круто)))
У нас интегерная длина вначале. Т.е. 4 байта. Всегда. А экономить на двух байтах хз. Не настолько велики нагрузки чтоб это окупилось. |
| Часовой пояс GMT +4, время: 05:52. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.