Как организовать общение через сокеты Qt и Java

У меня есть программа на Qt. Она через создание нового процесса - QProcess создает процесс, в котором запускается программа на java. Идея запустить java и наладить общение через сокеты.

При этом в реальности получается так: я запускаю Qt.exe, создаю процесс java, пытаюсь подсоединиться к java программе по сокету, а она еще не запустилась, потому что Qt быстрее запускается. Поэтому происходит так, я пытаюсь в Qt соединиться с сокетом из java, а в этот момент сокет на java еще не создан и получается Qt не соединяется. Получается, что процесс взаимодействия не удается сделать последовательный.


Подскажите какие есть механизмы, чтобы сделать так чтобы Qt соединялся с java именно в тот момент когда java уже создалась и все проинициализировала и открыла сокет для соединения. Пока есть мысли сделать задержку потока в Qt на какое-то время, но я понимаю, что это в целом не решение проблемы. Подскажите как быть в такой ситуации.


Ответы (2 шт):

Автор решения: Alexander Chernin

На Qt создаем и запускаем сервер (QTcpServer), а затем запускаем Java-приложение, создаем и запускаем в нем сокет-клиент (Socket) и долбимся на сервер. Сервер создан раньше и, соответственно, уже работает и ждет соединения от клиентов

→ Ссылка
Автор решения: Sergey Tatarincev

Сокеты не очень надежная вещь.

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

В вашем случае обе программы при запуске присоединятся к шине и смогут свободно обмениваться данными

→ Ссылка