Я бы посоветовал вам использовать TCP-сокеты .
Фактические накладные расходы на TCP-сокеты, по моему опыту, очень очень низкие по сравнению с нагрузкой других задачприложения, по крайней мере те, которые я использую для разработки.Я имею в виду, иногда, даже если задержка сокетов вдвое больше, чем задержка других механизмов IPC, в общем рабочем процессе они оказывают очень незначительное влияние.И это избавляет вас от необходимости создавать IPC между Java-приложением и C ++, что в конечном итоге потребует от вас использования конкретной библиотеки Java, которая использует JNI, с накладными расходами JNI и одной из самой библиотеки.
Я на самом деле измерил в моих приложениях Java, что влияние сборщика мусора гораздо важнее, чем задержка, вызванная " loopback " TCP-сокетами.
Более того, TCP-сокеты болеемасштабируемый (и портативный!), чем традиционный IPC.Что если в будущем вам придется запустить клиент и сервер на разных машинах?В сценарии «TCP-сокеты» вам придется выполнить 5-минутный хак, в сценарии «традиционный IPC» вам придется переписать весь материал IPC.
Однако,каков общий рабочий процесс вашего приложения?
Даже если подтверждение не требуется, я бы предложил использовать TCP (а не UDP), чтобы избежать несортированной доставки (что приводит к боли в заднице).когда речь идет о переупорядочении материала, который вы получили - некоторые из ваших сообщений имеют размер 100 КБ, и он не помещается в пакет UDP).
В ответ на ваш последний вопрос, чтобы сервер информировал клиента оport, вы можете просто заставить сервер запускать клиент с определенным параметром командной строки 'port', или заставить сервер сохранить небольшой файл в / tmp (или другой временный каталог) с номером порта, записанным внутри.