На работе я разрабатываю пользовательский интерфейс для управления группами роботов.Роботы используют широковещательные передачи UDP для управления своими движениями друг с другом.
Графический интерфейс должен иметь возможность общаться с роботами.Для этого запускается промежуточный сервер.Все роботы слушают его (с датчиками UDP), и все работающие графические интерфейсы подключаются к нему (через TCP).Он управляет связью через графический интерфейс <-> Robot.
Однако сервер написан с помощью библиотеки C ++ Boost, а графический интерфейс написан на Java, и возникают некоторые проблемы с сетью.Я легко подключаюсь к серверу с помощью сокета:
try {
socket = new Socket(targetAddress, targetPort);
} catch (IOException e) { e.printStackTrace(); }
Сервер регистрирует соединение, и все выглядит хорошо.
Однако, когда я пытаюсь отправить строки:
try {
stream.writeUTF(message);
stream.flush();
} catch (IOException e) { e.printStackTrace(); }
Примечание. Сначала я использовал PrintWriter для отправки строк по одной (println ()), но переключился на DataOutputStream, чтобы посмотреть, поможет ли это.
Мы столкнулись спроблемы.Boost даже не регистрирует, что я отправил сообщение, хотя Java успешно это сделала.Кроме того, когда строки отправляются с сервера, они находятся в неузнаваемом формате.
Небольшое изучение проблемы предполагает, что Boost автоматически добавляет текст «заголовка» ко всем отправляемым сообщениям, помогая архивировать сообщения.он получает.Поскольку Java этого не делает, похоже, что это может быть причиной.Это правильно?Если так, как мы можем обойти это?
Несколько замечаний:
- Из-за нехватки времени переключение на другие библиотеки / языки в больших масштабах на самом деле не оченьопция.Однако, если есть библиотека C ++ TCP, которая позволит серверу получать отправляемые мной сообщения, и мы можем легко интегрировать ее, это будет perfect .
- Сетевой код Java работаетидеально при подключении к серверу Java.Кажется, что трудности возникают в интерфейсе Boost-Java.
- К сожалению, ни я, ни другой человек, работающий над этим аспектом проекта, не имеют такого опыта работы в сети.:( Мой опыт в разработке Java и GUI, а другой человек - программист AI / специалист по аппаратному обеспечению. Любая и вся помощь в этом вопросе была бы невероятно желательна.