Russian Qt Forum
Ноябрь 23, 2024, 23:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Формирование сетевого пакета  (Прочитано 4219 раз)
max1983
Гость
« : Февраль 13, 2011, 15:01 »

Делаю так.
Код:
 QString  Login = QString(plainTextEditLogin->toPlainText());
 QString  Password = QString(plainTextEditPassword->toPlainText());

    //Создаем пакет аунтификацции
    QByteArray datagram;//Бутесы
    datagram.resize(124);//Размер бутеосв
    datagram.insert(0,cmdLogin);//Назначаем команду что будем логинится
    datagram.insert(4,(Login.length()));//Сообщяем о длине логина
    datagram.insert(8,(Password.length()));//Сообщяем о длине хеша пароля
    datagram.insert(12,sizeof(""));//Сообщяем о длине соообщения
    datagram.insert(16,Login.toAscii());//Вставляем логин
    datagram.insert(16+Login.length(),Password.toAscii());//Позади логина вставляем ХЕШ пароля
Результат с разных компьютеров такой
НЕ ПРАВИЛЬНЫЙ          ПРАВИЛЬНЫЙ   
[0x0]   0x1 '_'         [0x0]   0x1 '_'
[0x1]   0x0 ''            [0x1]   0x0 ''
[0x2]   0x0 ''            [0x2]   0x0 ''
[0x3]   0x0 ''            [0x3]   0x0 ''
[0x4]   0xf '_'            [0x4]   0xf '_'
[0x5]   0x0 ''            [0x5]   0x0 ''
[0x6]   0x30 '0'         [0x6]   0x0 ''
[0x7]   0x0 ''            [0x7]   0x0 ''
[0x8]   0x8 '_'         [0x8]   0x8 '_'
[0x9]   0xff 'ÿ'         [0x9]   0x0 ''
[0xa]   0x0 ''                 [0xa]   0x0 ''
[0xb]   0x0 ''            [0xb]   0x0 ''
[0xc]   0x1 '_'        [0xc]   0x1 '_'
[0xd]   0x0 ''           [0xd]   0x0 ''
[0xe]   0x0 ''            [0xe]   0x0 ''
[0xf]   0x0 ''                 [0xf]   0x0 ''

Разница выделена красным.
Кто виноват?
Это из дебагера сервера.. мож по пути пакеты подпортились?
Использую UDP.
Записан
Fat-Zer
Гость
« Ответ #1 : Февраль 13, 2011, 15:21 »

QByteArray & QByteArray::insert ( int i, char ch )
Записан
max1983
Гость
« Ответ #2 : Февраль 13, 2011, 15:57 »

Код:
datagram.insert(4,sizeof(tr("Login")));//Сообщяем о длине логина
datagram.insert(8,sizeof(tr("HESPASSWORD")));//Сообщяем о длине хеша пароля
datagram.insert(12,sizeof(""));//Сообщяем о длине соообщения
datagram.insert(16,tr("Login"));//Вставляем логин
datagram.insert(16+sizeof(tr("Login")),tr("HESPASSWORD"));//Позади логина вставляем ХЕШ пароля
На локальном компе ошибка выскакивает 1 из 10 ~ c удаленного постоянно

я пишу данные в 0,4,8,12..
откуда берутся данные в 6 и 9?
« Последнее редактирование: Февраль 13, 2011, 15:59 от max1983 » Записан
Fat-Zer
Гость
« Ответ #3 : Февраль 13, 2011, 16:00 »

я к тому что insert устанавливает только один(!) байт, а остальные 3 остаются случайными.
в "6 и 9" - это как раз и есть неинициализираванные данные. Нулями за вас заполнять никто массив не будет.

ЗЫ: к проблеме не относится, но посмотрите как insert работает... resize в данном случае - бесполезная вещь
« Последнее редактирование: Февраль 13, 2011, 16:14 от Fat-Zer » Записан
max1983
Гость
« Ответ #4 : Февраль 13, 2011, 18:08 »

Код:
QByteArray datagram;//Бутесы
datagram.resize(124);//Размер бутеосв
datagram.clear();//
CLEAR Заполняет все промежуточные байты 0x20..
А мне надо 0x0... кто знает как?
Записан
Странник
Гость
« Ответ #5 : Февраль 14, 2011, 11:21 »

я к тому что insert устанавливает только один(!) байт, а остальные 3 остаются случайными.
это кто тебе рассказал такую враку?

для установки нескольких байт:
QByteArray & QByteArray::insert ( int i, const QByteArray & ba )
QByteArray & QByteArray::insert ( int i, const QString & str )
QByteArray & QByteArray::insert ( int i, const char * str )
QByteArray & QByteArray::insert ( int i, const char * str, int len )

QByteArray & QByteArray::insert ( int i, const char * str, int len ) - и пожалуйста, впихивай свои int'ы.
« Последнее редактирование: Февраль 14, 2011, 11:24 от Странник » Записан
Fat-Zer
Гость
« Ответ #6 : Февраль 14, 2011, 11:34 »

я к тому что insert устанавливает только один(!) байт, а остальные 3 остаются случайными.
это кто тебе рассказал такую враку?
я про перегруженные версии знаю, но в том коде, который привёл ТС всё приводилось к char и устанавливался только один байт...
Записан
max1983
Гость
« Ответ #7 : Февраль 14, 2011, 12:29 »

я про перегруженные версии знаю, но в том коде, который привёл ТС всё приводилось к char и устанавливался только один байт...
Все верно! Спасибо Fat-Zer.
пока решение
datagram[6] = 0x0;
и т д
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 20.