![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Norrius |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Добрый день. Я пишу небольшой проект, содержащийсервер
Добрый день. Я пишу небольшой проект, содержащий серверную и клиентскую часть. В частности, мне нужно, чтобы клиент имел копию некоторого класса, имеющегося на сервере. Собственно, вопрос - как передать объект класса через TCP сокет? Нужно ли мне вручную создавать QByteArray, содержащий закодированную информацию об объекте (а он может содержать другие классы и структуры), или есть более простые способы? |
|
|
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
В Qt connection points нет насколько я знаю.
Нужно только руками. Для примера два способа: 1 способ и самый простой - это использование стандартных С++ типов, вроде int, char и ... Ничего тебе не мешает имея такую структуру:
отправить её:
2 способ - реализация реализация своего operator char*() для класса, для последуюшей отправки по сети. |
|
|
Алексей1153 |
![]()
Сообщение
#3
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
сериализация в XML - универсальное в данном случае средство
![]() (со структурами тоже можно, но всё это будет удобно ровно до первого изменения структур. Опять же, динамически выделенную память передавать без трудностей так невыйдет) |
|
|
Norrius |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Использовать memcpy() у меня не получается (хотя, может, я просто не понял документацию), я получаю мусор в клиенте. Сервер:
Где QList<QTcpSocket *> connections содержит все подключения. Клиент:
реализация своего operator char*() А что это есть и где про это можно узнать подробнее? сериализация в XML - универсальное в данном случае средство Не будет ли это заворотом в лишнюю обертку? ![]() |
|
|
ViGOur |
![]()
Сообщение
#5
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
сервер
клиент
А что это есть и где про это можно узнать подробнее? В принципе любой из книжек по С++.Смотри в сторону переопределения операторов, там объясняется как переопределять operator int, operator char и т.д. и т.п. Например можешь почитать: C++ : библиотека программиста (Автор: Джефф Элджер) У него точно есть подробное описание этого оператора, на примере класса String... |
|
|
Iron Bug |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
процедура передачи класса - даже не сериализация, а маршалинг. если интересует эта тема - читать про маршалинг (marshaling) в С++.
|
|
|
Алексей1153 |
![]()
Сообщение
#7
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ssoft |
![]()
Сообщение
#8
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
сервер memcpy(buff, &tmp, sizeof(p)); Language: cpp клиент memcpy(&tmp, buff, sizeof(p)); Это работает, если класс содержит только простые типы. Если класс содержит аля QByteArray, QString или любой указатель, то только сериализация или маршалинг. Не будет ли это заворотом в лишнюю обертку? Мне нужно просто синхронизировать данные о классе p. В общем случае проще ничего не придумали. Сообщение отредактировал ssoft - 26.7.2012, 6:52 |
|
|
ViGOur |
![]()
Сообщение
#9
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#10
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 10.4.2025, 17:38 |