Добрый день.
стоит задача написать клиент-серверное приложение. Сервер на Qt, клиент — на Java под андроид. Сервер пока взял из примеров qt.
Проблема вот в чем: если я отправляю строку из джава-клиента, то сервер принимает пустую строку, то есть "". если же отсылать строку из qt-клиента (из примеров qt), то все принимается нормально. Подскажите, в чем может быть дело?
Код сервера (слот, считывающий данные из клиентского сокета):
void MyServer::slotReadClient()
{
QTcpSocket* pClientSocket = (QTcpSocket*)sender();
QDataStream in(pClientSocket);
in.setVersion(QDataStream::Qt_4_7);
QTime time;
QString str;
while (1)
{
if (!m_nNextBlockSize)
{
if (pClientSocket->bytesAvailable() < (int)sizeof(quint16))
{
break;
}
in >> m_nNextBlockSize;
}
if (pClientSocket->bytesAvailable() < m_nNextBlockSize)
{
break;
}
in >> time >> str;
m_nNextBlockSize = 0;
}
qDebug() << str;
}
Код qt-клиента (слот отправки данных, с которым все работает):
void MyClient::slotSendToServer()
{
QByteArray arrBlock;
QDataStream out(&arrBlock, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_7);
out << quint16(0) << QTime::currentTime() << m_ptxtInput->text();
out.device()->seek(0);
out << quint16(arrBlock.size() - sizeof(quint16));
m_pTcpSocket->write(arrBlock);
}
Код джава-клиента (метод отправки сообщения, которое сервер не получает):
private void writeMessage(String message)
{
if (socket != null)
{
try {
outStream.writeUTF(message);
outStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Думаю, что проблема связана со строками
in.setVersion(QDataStream::Qt_4_7);
out.setVersion(QDataStream::Qt_4_7);
в qt сервере и клиенте. То есть там свой протокол данных. а из джава кода я просто строку передаю.