Отправка данных через сокеты в Java и получение в C ++ с помощью сокетов QT - PullRequest
0 голосов
/ 07 февраля 2019

Это может быть глупым вопросом, но для проекта разработки программного обеспечения необходимо, чтобы приложение для Android отправляло данные в бэкэнд-приложение, а бэкэнд-приложение передавало данные в приложение C ++ для настольных компьютеров.Я отвечаю за написание приложения для Android и написал работающий прототип с использованием Android Studio и Java.У меня на рабочем столе запущено тестовое Java-приложение, которое может использоваться в качестве бэкэнда для моих целей тестирования, поскольку моя команда еще не разработала ни бэкэнд, ни настольное приложение.Мой товарищ по команде утверждает, что нам нужно будет переписать приложение с использованием C ++ и QT, чтобы иметь возможность отправлять данные из приложения в приложение C ++ с использованием сокетов QT, но на основе моего (по общему мнению, невежественного) понимания сетей на основе сокетов, данныедолжен передаваться как поток байтов между сокетами, поэтому взаимодействие между двумя языками не должно быть проблемой.Итак, мой вопрос: могу ли я выполнять передачу данных на основе сокетов между двумя разными языками?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

У вас может быть два совершенно разных получателя на двух концах сокета, и один может быть Java, а другой может быть Qt C ++ или чем-то еще, что вам нравится.Это не проблема.

Самая большая проблема в том, как вы на самом деле общаетесь - какой у вас протокол?Когда вы отправляете данные, что вы отправляете?Например, если вы используете богатые возможности сериализации Java на отправляющей стороне и просто отправляете объекты Java, у вас будет очень трудное время для расшифровки этого на стороне C ++.

В гетерогенных средахЛучше всего использовать протокол обмена сообщениями для обмена данными.Если производительность не имеет значения, часто предлагаются буферы протокола Google, так как они имеют привязки Java и C ++.

0 голосов
/ 07 февраля 2019

Конечно можно.Насколько я понимаю ваш вопрос, вам нужно приложение Qt, которое может подключаться к TCP-серверу на базе Java и отправлять / получать данные.Это довольно просто сделать в Qt.На самом деле есть разные способы.Здесь только один.

Создайте QTcpSocket, вызовите QTcpSocket :: connectToHost с IP-адресом или DNS-именем сервера и порта или процесса сервера.Затем либо вызовите QTcpSocket :: waitForConnected, либо позвольте асинхронно проинформировать себя об установленном соединении, используя SIGNAL (connected ()) QTcpSocket.Если подключено, вы можете вызвать QTcpSocket :: write или QTcpSocket :: read.Если вы хотите читать асинхронно, вы можете подключиться к SIGNAL (readyRead ()) QTcpSocket.

Конечно, вы должны согласовать протокол обмена данными.Самый простой (и не очень эффективный) - перевести все в текст, поэтому, если, например, сервер Java хочет отправить вам число, он просто отправляет строковое представление числа.Более сложные данные могут быть упакованы в формат XML.Надеюсь это поможет.

Для получения дополнительной информации посмотрите https://doc.qt.io/qt-5/qtcpsocket.html или https://doc.qt.io/qt-5/qtnetwork-fortuneclient-example.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...