Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ маркеры в передаваемых через сокет сообщениях

Автор: 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

почитал, поправил, спасибо)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)