crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> маркеры в передаваемых через сокет сообщениях
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  


Цитата(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
Сообщение #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  


почитал, поправил, спасибо)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 6.7.2020, 21:17