QString msg_type, freq;
in » msg_type » freq;
Как я понял, с сервера приходят строка и short int. Почему ты пытаешься 2 строки прочитать?
2) Судя по тому, что пришло 4 байта, значит строка у тебя не null terminated, а QDataStream читает массив чаров с \0 на конце через operator>>
3) QDataStream с QString через operator>> не работает, насколько я знаю.
Вывод: придумай свой протокол и читай данные через readRawData().
Или вообще не страдай фигней с придумыванием своего протокола, а просто юзай JSON RPC.
Если я с Qt клиента(не путать с AS3 клиентом, который мне нужен) отправляю данные так:
void MyClient::slotSendToServer()
{
int row=ui.tableWidget->rowCount();
QString msg_type = "Test Message";
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_8);
out<<quint16(0)<<msg_type<<ui.Edit_freq->text();
out.device()->seek(0);
out<<quint16(block.size() - sizeof(quint16));
tcpSocket->write(block);
}
то все данные успешно принимаются.
При этом на сервере могу прописать даже:
QString str1, str2, str3, str4
in » str1 » str2 » str3 » str4;
Данные придут и запишутся в str1 и str2, а str3 и str4 без каких-либо проблем останутся пустыми. Следовательно QDataStream работает с QString через оператор >>.
Если с AS3 клиента(!) отправить строку "12", а на сервере считывать так:
quint8 command, command1;
in » command » command1;
то в command будет записано 49, а в command1 - 50. Что соответствует ASCII кодам единицы и двойки.
По пункту 2 - можете пояснить что да как? Ваша мысль кажется очень здравой. В каком виде нужно передавать или читать строку, чтобы можно было ее вывести на экран?
Хотелось бы сколько-нибудь рабочий пример (и меньше ссылок:))
P.S. Про JSON RPS заинтересовало и даже очень, но давай сперва попробуем сделать без него.