маркеры в передаваемых через сокет сообщениях |
Здравствуйте, гость ( Вход | Регистрация )
маркеры в передаваемых через сокет сообщениях |
antoshib |
30.6.2010, 9:39
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 29.6.2010 Пользователь №: 1841 Спасибо сказали: 0 раз(а) Репутация: 0 |
Использую QTcpServer и QTcpSocket для обмена сообщениями.
Как я обнаружил с помощью анализатора трафика, в передаваемых сообщениях вставляются маркеры и пакеты выглядят следующим образом: запрос: G...<сообщение запроса>. ответ: a...<сообщение ответа>. При этом все работает хорошо, если и клиент, и сервер написаны на QT (при передаче сообщений маркеры не мешаются). Но сторонний клиент (написан на дэлфи) начинает спотыкаться об эти маркеры - не знаю как с этим быть? |
|
|
kuzulis |
30.6.2010, 9:56
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Не может быть! Код в студию!
Какие методы классов QTcpServer и QTcpSocket используете для чтения/записи? Используете ли DataStream ? |
|
|
antoshib |
30.6.2010, 14:18
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 29.6.2010 Пользователь №: 1841 Спасибо сказали: 0 раз(а) Репутация: 0 |
Не может быть! Код в студию! Какие методы классов QTcpServer и QTcpSocket используете для чтения/записи? Используете ли DataStream ? У меня пока все по-простому - синхронно и без использования потоков. Если увидите косяки - сообщите пожалуйста) CODE bool socketWrite( QTcpSocket *S, QString str, int Timeout ){ ///////////////////////////////////////////////////////////////////// QByteArray block; qint64 d_size; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); out << str.toAscii().constData(); d_size = S->write( block ); return S->waitForBytesWritten( Timeout ); }; bool socketRead( QTcpSocket *S, QString *str, int Timeout ){ ///////////////////////////////////////////////////////////////////// if (!S->waitForReadyRead(Timeout)) return false; quint16 blockSize; QDataStream in(S); in.setVersion(QDataStream::Qt_4_0); blockSize = S->bytesAvailable(); char *rb = new char( blockSize ); uint br = (uint) blockSize; in.readBytes( rb, br ); *str = rb; delete[] rb; return true; }; |
|
|
kuzulis |
30.6.2010, 16:03
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Цитата QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); antoshib, а ну быстро читать про QDataStream - что это и с чем это едят!!! Я не зря спросил про это! |
|
|
antoshib |
1.7.2010, 14:21
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 29.6.2010 Пользователь №: 1841 Спасибо сказали: 0 раз(а) Репутация: 0 |
почитал, поправил, спасибо)
|
|
|
Текстовая версия | Сейчас: 28.1.2025, 19:51 |