Получение данных на сервере? |
Здравствуйте, гость ( Вход | Регистрация )
Получение данных на сервере? |
V7T |
21.10.2011, 16:08
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 11.10.2011 Пользователь №: 2939 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте, пишу клиент/серверное приложение, я использую FortuneClient и ThreadedFortuneServer из SDK QT.
Все бы ничего, но ни как не могу понять (это первое мое приложение в QT и собственно в линуксе), принцип получения данных на сервере. В самих примерах все достаточно просто, но там данные отправляются клиенту, который их принимает, перед этим отправив запрос. Собственно вот часть кода клиента: часть кода сервера:
В коде сервера явно не все впорядке (возможно и клиенте) , и Вас уважаемые гуру наверно . Правильно ли данные отправляются? Может стоит создать connect(сокет,сигнал(readyRead()),...,slot(..)), впринципе, что я только не делал, все одно - ничего)). Не первый день пытаюсь разобраться, окончательно запутался. Подскажите, пожалуйста. |
|
|
silver47 |
24.10.2011, 9:55
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
А класс SendImage обязательно должен быть таким запутанным. Может просто послать эту картинку и всего делов?
Кроме того, насколько мне известно, кажется, что, оператор << перегружен для QImage. Если это так, то в этом шаманстве: нет смысла. Достаточно напрямую записать в поток и все:
Пы.Сы. А Вы уверенны, что картинка будет точно размером меньше 65килобайт? Сообщение отредактировал silver47 - 24.10.2011, 10:12 |
|
|
V7T |
25.10.2011, 0:13
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 11.10.2011 Пользователь №: 2939 Спасибо сказали: 0 раз(а) Репутация: 0 |
А класс SendImage обязательно должен быть таким запутанным. Может просто послать эту картинку и всего делов? Пы.Сы. А Вы уверенны, что картинка будет точно размером меньше 65килобайт? ...хм, например, в дебагер размер Image вывожу, получаю около 200000 (размер байтового массива QByteArray), т.е., не хочу сморозить глупость, но как я понимаю это 200000 байт, следовательно изображение занимает около 200 кбайт. На сервере я спокойно их получаю. Получается, что все сообщение, в данном случае, разобьется на 4 блока. ...кстати да, убрал полностью класс SendImage, решил не заморачиваться с ним. Что касается прямого запихивания QImage в QDataStream, out<<image (альтернатива out<<(&out,&image) как то так, ) запихивается на ура, но на сервере QDataStream взяв сокет не хочет выводить данные в image напрямую (ошибок не наблюдается), т.е. сокет не пустой (сколько отправлено, столько и пришло). все как в документации.
А теперь самое интересное, неоднократно натыкался в интернете, на одну особенность или может быть в силу таких же кривых рук. Если передавать изображение так:
т.е. сохранить изображение в массив байтовый в формате PNG, на сервере тоже принимать в PNG (image.loadFromData(Block,"PNG");, то все работает замечательно. Но стоит поменять формат загрузки/разгрузки в/из байтового массива, например JPG, BMP то при получении на сервере (in>>Block, image.loadFromData(Block,"...")) c последующей проверкой image.isNull() - постое, по нулям, хотя поток блоковый заполнен. В результате, если отправлять/принимать только в PNG, то сохранять придется тоже в PNG (image.save(..."PNG")), в другом формате не получается, следовательно изображение будет занимать 3 метра. А это не выгодно, хотя мне для учебы не принципиально. Решение есть, если я отправляю просто pixmap, перед этим загнанный в массив, на сервере потом могу сохранять в любом формате, при этом экономя место. |
|
|
Текстовая версия | Сейчас: 13.11.2024, 0:57 |