Как отправить / получить данные XML с сокетами в Qt, используя строку?

0

У меня есть Qt TCP Server и клиентская программа, которые могут взаимодействовать друг с другом. Сервер может отправлять некоторые сгенерированные функции в сокет, используя Qtextstream. И Клиент считывает данные из сокета с помощью простого readAll() и отображает его в QtextEdit.

Теперь мои данные со стороны сервера огромны (вокруг 7000+ выборок), и мне нужно, чтобы данные отображались на стороне клиента мгновенно. Я узнал, что использование XML поможет в моем случае. Итак, я создал Qt XML-сервер, и он генерирует все XML-данные в XML файл. Я читаю XML файл на стороне клиента, и я могу показать его содержимое. Я использовал метод DOM для синтаксического анализа. Но я получаю данные для отображения только тогда, когда все 7000+ образцы были сгенерированы на стороне сервера.

Мне нужны разъяснения по этим вопросам:

  1. Как написать каждый элемент XML-сервера в строку и отправить их через сокет? Я узнал, что tagName() может мне помочь, но я не смог понять, как это сделать.
  2. Есть ли другой способ, отличный от метода String, для получения отдельного элемента, сгенерированного на стороне сервера, для отображения на стороне клиента.

PS: Я новичок, простите мое невежество. Спасибо.

  • 0
    Я не думаю, что XML будет хорошей идеей в вашем случае: теги XML увеличат размер ваших данных. Но 7000 символов - это арахис для вашего компьютера. Итак, вы уверены, что размер это ваша проблема?
Теги:
qt
sockets

1 ответ

0

Большинство парсеров DOM XML требуют полного, хорошо сформированного XML-документа, прежде чем они что-либо сделают с ним. Это то, что вы видите: ваши данные обрабатываются только после того, как все образцы получены.

Вам нужно использовать инкрементный синтаксический анализатор, который не заботится о том, что документ XML еще не завершен.

С другой стороны: если вам не требуется XML для взаимодействия с сторонними системами, вы, вероятно, тратите много ресурсов, используя его. Я не знаю, где вы "научились", что XML "поможет в вашем случае". Мне это не учится, это просто после толпы, не понимая, что происходит. Является ли ваше требование использовать XML или перемещать данные? Перемещение данных вокруг было хорошо понятой проблемой на протяжении десятилетий. Компьютеры "говорят" двоично. Знаешь, не нужно обойти это. Если вам нужно только перемещаться по некоторым номерам, используйте QDataStream и QDataStream это с ним. Это будет на два порядка быстрее, чем самые быстрые синтаксические анализаторы XML, вы будете передавать на порядок меньше данных, и все будут жить счастливо с тех пор *.

* Живя счастливо, когда это не гарантировано, индивидуальные результаты могут отличаться.

  • 0
    Спасибо за понимание. Нет, я не обязан использовать только XML, и да, мне нужно перемещать данные. Теперь мои данные поступают с одноплатного компьютера со встроенным Linux, а мои клиенты - это обычные пользовательские ПК с различными ОС. Относится ли эта ситуация к категории «требующих XML для взаимодействия с системами сторонних производителей»? И я пытаюсь использовать QDataStream, буду обновлять информацию о любом прогрессе.
  • 0
    Если ваше программное обеспечение находится на обоих концах, вам ничего не нужно, кроме QDataStream . Единственная рекомендация - исправить версию используемого вами протокола QDataStream - установить для него одинаковое значение как на принимающей, так и на отправляющей сторонах. Таким образом, вы можете, в конце концов, документировать, как выглядят отправляемые вами двоичные данные - это гарантированно останется таким, несмотря на то, что вы обновляете версии Qt.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню