![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
antoshib |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 29.6.2010 Пользователь №: 1841 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Использую QTcpServer и QTcpSocket для обмена сообщениями.
Как я обнаружил с помощью анализатора трафика, в передаваемых сообщениях вставляются маркеры и пакеты выглядят следующим образом: запрос: G...<сообщение запроса>. ответ: a...<сообщение ответа>. При этом все работает хорошо, если и клиент, и сервер написаны на QT (при передаче сообщений маркеры не мешаются). Но сторонний клиент (написан на дэлфи) начинает спотыкаться об эти маркеры - не знаю как с этим быть? |
|
|
kuzulis |
![]()
Сообщение
#2
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: ![]() ![]() ![]() |
Не может быть! Код в студию!
Какие методы классов QTcpServer и QTcpSocket используете для чтения/записи? Используете ли DataStream ? |
|
|
antoshib |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 29.6.2010 Пользователь №: 1841 Спасибо сказали: 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 |
![]()
Сообщение
#4
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: ![]() ![]() ![]() |
Цитата QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); antoshib, а ну быстро читать про QDataStream - что это и с чем это едят!!! Я не зря спросил про это! ![]() |
|
|
antoshib |
![]()
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 29.6.2010 Пользователь №: 1841 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
почитал, поправил, спасибо)
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 6.2.2025, 3:43 |