Russian Qt Forum
Июля 02, 2025, 09:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Чтение из сокета  (Прочитано 9743 раз)
8: Undefined index: LANG_NAME
Файл: /var/www/html/Sources/geshi/geshi.php
Строка: 4032
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« : Сентября 05, 2011, 11:10 »

Добрый день! Такой вопрос..
Есть структура одна и та же у клиента и у сервера
Код:
struct headl
{
   quint32 sizeDate;
   quint32 titMsg;
   QString nameFile;
}
Ее передаю по сети..
Сервер
Код:
QByteArray arrBlock;
headl objHead;
objHead.sizeDate = 10;
objHead.titMsg = 1;
objHead.nameFile = "Hello";

arrBlock.append((const char*)&objHead,sizeof(objHead));
m_pTcpSocket->write(arrBlock);

Киент
Принимаю структуру..
Код:
tcpSocet->read((char*)&objHead,sizeof(objHead));
В полях..
objHead.sizeDate = 10;
objHead.titMsg = 1;
все передано корректно..

а вот в objHead.nameFile = 0х00ad1fd0;

ПОЧЕМУ?Непонимающий??
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Сентября 05, 2011, 11:12 »

Потому что так нельзя делать. Используй QDataStream.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ddrtn
Гость
« Ответ #2 : Сентября 05, 2011, 11:12 »

QString не является POD типом. для передачи в сокет поля структуры лучше серилизовать. если же передавать структуру бинаро, то вместо QString нужно пользоваться char[] с постоянным размером.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #3 : Сентября 05, 2011, 11:15 »

Потому что так нельзя делать. Используй QDataStream.

QString без QDataStream не передашь что ли? Мне нужно сделать методами read()/write().. без QDataStream..
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Сентября 05, 2011, 11:21 »

При помощи QDataStream все записываешь в QByteArray, который уже и передаешь.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #5 : Сентября 05, 2011, 11:29 »

При помощи QDataStream все записываешь в QByteArray, который уже и передаешь.

ты не обратил внимание.. я и передаю QByteArray! Для этого не обязательно использовать QDataStream
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #6 : Сентября 05, 2011, 11:36 »

ты не обратил внимание.. я и передаю QByteArray! Для этого не обязательно использовать QDataStream
Необязательно, но так как вы записываете делать нельзя.
Если упрощённо объяснить, то QString внутри содержит указатель (адрес в памяти) и вместо текста вы передаёте его. В клиенте этот указатель ссылает фактически в никуда.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Сентября 05, 2011, 11:39 »

Вообще, не используй такой сишный каст структуры к чему-то другому и обратно. Используй сериализацию.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #8 : Сентября 05, 2011, 15:37 »

И все же как конкретно передать текстовое сообщение, если не QString..?
Объявить в структуре как вариант char name[1024]; и передавать таким образом?
Тогда попутно еще вопросик почему при конвертации из QString в char в конце добавляется мусор?

Код:
QString wayFile;
objHead.name[i] = wayFile.at(i).toAscii();
 
В замешательстве
 

Записан