crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> QtcpSocket помогите отправить пакет
baraban
  опции профиля:
сообщение 11.1.2012, 14:20
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 11.1.2012
Пользователь №: 3120

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день друзья, помогите пожалуйста сформировать пакет и отправить его на сервер.
Посылка выглядит следующим образом
Send: Return Code: 0x00000000
00000000  18 00 00 00 C2 88 00 00 FF FF FF FF FF FF FF FF    ................
00000010  00 00 00 00 00 00 00 00                            ........


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Orfus
  опции профиля:
сообщение 11.1.2012, 14:46
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 26.10.2011
Пользователь №: 2967

Спасибо сказали: 0 раз(а)




Репутация:   0  


А что собственно не ясного?

1) Подключаешься к серверу.
TCPSocket->connectToHost("ip",port)

2)Ловишь у сокета сигнал QTcpSocket::connected () и по нему высылаешь свои данные с помощью сделанного для этого слота с примерно таким содержимым
QByteArray arrBlock;
//тут добавляешь в блок свои данные
TCPSocket->write(arrBlock);



P.S. 1ый пункт можно вообще убрать если подключение постоянно поддерживается и надо слать периодически нажимая на кнопку или по таймеру


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
baraban
  опции профиля:
сообщение 11.1.2012, 15:09
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 11.1.2012
Пользователь №: 3120

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Orfus @ 11.1.2012, 14:46) *
А что собственно не ясного?

1) Подключаешься к серверу.
TCPSocket->connectToHost("ip",port)

2)Ловишь у сокета сигнал QTcpSocket::connected () и по нему высылаешь свои данные с помощью сделанного для этого слота с примерно таким содержимым
QByteArray arrBlock;
//тут добавляешь в блок свои данные
TCPSocket->write(arrBlock);



P.S. 1ый пункт можно вообще убрать если подключение постоянно поддерживается и надо слать периодически нажимая на кнопку или по таймеру


Мне как раз не ясно как сформировать пакет исходя из данных приведенных на картинке. Не подскажешь ? ))

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Orfus
  опции профиля:
сообщение 11.1.2012, 15:29
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 26.10.2011
Пользователь №: 2967

Спасибо сказали: 0 раз(а)




Репутация:   0  


Из чего то быстрого могу предложить только
Раскрывающийся текст
    QByteArray arr;

    //18 00 00 00
    arr.append(quint8(24));
    arr.append(char(0));
    arr.append(char(0));
    arr.append(char(0));
    //c2 88 00 00
    arr.append(quint8(194));
    arr.append(quint8(136));
    arr.append(char(0));
    arr.append(char(0));
    //FF FF FF FF
    arr.append(quint8(255));
    arr.append(quint8(255));
    arr.append(quint8(255));
    arr.append(quint8(255));
    //FF FF FF FF
    arr.append(quint8(255));
    arr.append(quint8(255));
    arr.append(quint8(255));
    arr.append(quint8(255));
    //00 00 00 00
    arr.append(char(0));
    arr.append(char(0));
    arr.append(char(0));
    arr.append(char(0));

    //00 00 00 00
    arr.append(char(0));
    arr.append(char(0));
    arr.append(char(0));
    arr.append(char(0));

С моей колокольни весьма хреново выглядит, но должно работать :mellow:
Всё же поймай снифером глянь. Может кто предложит вариант перевода получше.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
baraban
  опции профиля:
сообщение 11.1.2012, 15:34
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 11.1.2012
Пользователь №: 3120

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Orfus @ 11.1.2012, 16:29) *
Из чего то быстрого могу предложить только
Раскрывающийся текст
    QByteArray arr;

    //18 00 00 00
    arr.append(quint8(24));
    arr.append(char(0));
    arr.append(char(0));
    arr.append(char(0));
    //c2 88 00 00
    arr.append(quint8(194));
    arr.append(quint8(136));
    arr.append(char(0));
    arr.append(char(0));
    //FF FF FF FF
    arr.append(quint8(255));
    arr.append(quint8(255));
    arr.append(quint8(255));
    arr.append(quint8(255));
    //FF FF FF FF
    arr.append(quint8(255));
    arr.append(quint8(255));
    arr.append(quint8(255));
    arr.append(quint8(255));
    //00 00 00 00
    arr.append(char(0));
    arr.append(char(0));
    arr.append(char(0));
    arr.append(char(0));

    //00 00 00 00
    arr.append(char(0));
    arr.append(char(0));
    arr.append(char(0));
    arr.append(char(0));

С моей колокольни весьма хреново выглядит, но должно работать :mellow:
Всё же поймай снифером глянь. Может кто предложит вариант перевода получше.


Делал вот так
QByteArray block;
  //QDataStream out(&block, QIODevice::WriteOnly);
//out.setVersion(QDataStream::Qt_4_3);
// out << (quint16)0;
  //  out << 26011;
//out.device()->seek(0);
// out << (quint16)(block.size() - sizeof(quint16));
  block.resize(24);
  block[0]=0x18;
  block[1]=0x00;
  block[2]=0x00;
  block[3]=0x00;
  block[4]=0xC2;
  block[5]=0x88;
  block[6]=0x00;
  block[7]=0x00;
  block[8]=0xFF;block[9]=0xFF;block[10]=0xFF;block[11]=0xFF;block[12]=0xFF;block[1
3]=0xFF;block[14]=0xFF;block[15]=0xFF;
  block[16]=0x00; block[17]=0x00; block[18]=0x00; block[19]=0x00; block[20]=0x00; block[21]=0x00; block[22]=0x00; block[23]=0x00; block[24]=0x00;

//block.fromHex("18 00 00 00 C2 88 00 00 FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00");
    tcpSocket.write(block,block.size());

Ловлю снифером то что уходит, и вижу, что в начале какой то мусор присутствует, а в конце то что я хочу чтоб посылалось))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Orfus
  опции профиля:
сообщение 11.1.2012, 15:45
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 26.10.2011
Пользователь №: 2967

Спасибо сказали: 0 раз(а)




Репутация:   0  


То не мусор в начале, а размер посылки в начале сообщения.
out << (quint16)0; резерв места
out<<... набиваешь данными
out.device()->seek(0);возвращаешься в начало
out << (quint16)(block.size() - sizeof(quint16));пишешь в начале размер пакета

Распространённая практика для потоковых соединений, вот только не для твоего случая. Сервер то не ты пишешь и судя по сообщению там этого нет. Ты же не сервер делаешь и насколько я могу судить по твоей табличке оно тебе не надо.
block=block.fromHex("18 00 00 00 C2 88 00 00 FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00");
tcpSocket.write(block);

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Orfus
  опции профиля:
сообщение 11.1.2012, 16:15
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 26.10.2011
Пользователь №: 2967

Спасибо сказали: 0 раз(а)




Репутация:   0  


#include <QtCore>
#include <QtNetwork/QTcpSocket>
#include <QApplication>

int main(int argc,char** argv){
    QApplication app(argc,argv);
    QByteArray arr=arr.fromHex("18 00 00 00 C2 88 00 00 FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00");;
    QTcpSocket socket;
    socket.connectToHost("127.0.0.1",3474);
    socket.waitForConnected();
    if(socket.state()==QTcpSocket::ConnectedState){
        socket.write(arr);
        socket.flush();
    }
    return app.exec();
}

:unsure: wpePro гарантирует это
http://i.minus.com/dbj0OMIeo3KGCB.PNG
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.1.2012, 19:25
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


ребят... узорвали мозг ))) Взорву и я вам своим вариантом

#pragma pack(push,1)
struct s_mydata
{
         quint32 m_headerdimension;
         quint32 m_commandcode____;
         quint32 m_sender_________;
         quint32 m_receiver_______;
         quint32 m_error__________;
         quint32 m_datadimension__;


    s_mydata()
        //типа значения по дефолту
        :        m_headerdimension(24   )
        ,        m_commandcode____(26011)
        ,        m_sender_________(-1   )
        ,        m_receiver_______(-1   )
        ,        m_error__________(0    )
        ,        m_datadimension__(0    )
    {

    }

    s_mydata(
         quint32 m_headerdimension
        ,quint32 m_commandcode____
        ,quint32 m_sender_________
        ,quint32 m_receiver_______
        ,quint32 m_error__________
        ,quint32 m_datadimension__
        )
        :        m_headerdimension(m_headerdimension)
        ,        m_commandcode____(m_commandcode____)
        ,        m_sender_________(m_sender_________)
        ,        m_receiver_______(m_receiver_______)
        ,        m_error__________(m_error__________)
        ,        m_datadimension__(m_datadimension__)
    {

    }

    const quint8* GetData()
    {
        return (quint8*)this;
    }

    quint32 GetSize()
    {
        return sizeof(*this);
    }
};
#pragma pack(pop)


//использование
s_mydata d1;//всё по умолчанию
s_mydata d2(1,2,3,4,5,6);

...send(d1.GetData(),d1.GetSize());
...send(d2.GetData(),d2.GetSize());


Сообщение отредактировал Алексей1153 - 11.1.2012, 19:27
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.1.2012, 19:43
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Алексей1153 @ 11.1.2012, 20:25) *
ребят... узорвали мозг ))) Взорву и я вам своим вариантом

А если на принимающей стороне у компьютера другой порядок байт?
Хорошо бы почитать про сетевой порядок байт в гугле. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.1.2012, 19:54
Сообщение #10


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


BRE, такого быть не может :)

разве что на уровне компиляции - но ведь это надо заранее рассмотреть. И добавить соответствующую переворачивающую функцию. Но лично мне такой вариант совсем не встречался
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.4.2024, 18:58