Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Qt сервер и java заказчик. Отчего сервер не считывает данные от заказчика?

Anna | 4.06.2014 | нет комментариев
Добрый день.

стоит задача написать заказчик-серверное приложение. Сервер на 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 сервере и заказчике. То есть там свой протокол данных. а из джава кода я легко строку передаю.

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB