Автор: antoshib 30.6.2010, 9:39
Использую QTcpServer и QTcpSocket для обмена сообщениями.
Как я обнаружил с помощью анализатора трафика, в передаваемых
сообщениях вставляются маркеры и пакеты выглядят следующим образом:
запрос:
G...<сообщение запроса>.
ответ:
a...<сообщение ответа>.
При этом все работает хорошо, если и клиент, и сервер написаны на QT (при передаче сообщений маркеры не мешаются).
Но сторонний клиент (написан на дэлфи) начинает спотыкаться об эти маркеры - не знаю как с этим быть?
Автор: kuzulis 30.6.2010, 9:56
Не может быть! Код в студию!
Какие методы классов QTcpServer и QTcpSocket используете для чтения/записи? Используете ли DataStream ?
Автор: antoshib 30.6.2010, 14:18
Цитата(kuzulis @ 30.6.2010, 10:56)
Не может быть! Код в студию!
Какие методы классов 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
Цитата
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
antoshib,
а ну быстро читать про QDataStream - что это и с чем это едят!!!
Я не зря спросил про это!
Автор: antoshib 1.7.2010, 14:21
почитал, поправил, спасибо)