Я работаю над серверным/клиентским приложением, которое позволяет подключать несколько клиентов к серверу в любой момент времени. Для каждого клиента сервер устанавливает объект ClientHandler
, который имеет входной и выходной поток для клиента, подключенного к этому сокету. Благодаря этому соединению клиент может отправлять несколько сообщений на сервер в любой момент на протяжении всей программы, и сервер будет отвечать в соответствии с сообщением.Java - распознавание отправленных сообщений и отправленных сообщений с сервера на стороне клиента
Что мне нужно реализовать - это механизм, который отправляет в определенные моменты сообщения всем клиентам, подключенным в настоящее время. Я сделал это, сохранив все выходные потоки для клиентов в ArrayList<PrintWriter>
, которые позволят отправлять одно и то же сообщение всем клиентам.
То, что я борюсь с таким:
Когда сообщение получено, что является индивидуальным для клиента, GUI клиента обновляются соответствующим образом (только определенное число сообщений может быть отправлено, так что только избранной количество возможных ответов от сервера, которые рассматриваются с помощью клиентских инструкций if). Однако, когда сообщение получено клиентом, который был отправлен всем клиентам, я хотел бы, чтобы клиент обновил GUI совершенно по-другому.
Учитывая, что обе формы ввода поступают из одного входного потока, я вижу, что это трудно, и я ожидаю, что мне придется объявлять любые методы, которые вызывают вывод с использованием , должны быть сделаны . Однако есть ли способ обработки разных входов при использовании того же PrintWriter
? Должно ли это быть сделано с использованием дополнительных операторов if
или это можно сделать с помощью отдельного Thread
на стороне клиента, который обрабатывает сообщения, отправленные всем клиентам?
Спасибо за любой совет, если вы считаете, что можете помочь, не стесняйтесь просить части моего существующего кода!
Марк
Я немного смущен здесь. Вы говорите о стороне сервера (отправляя сообщения всем клиентам), тогда вы говорите о стороне клиента (обновляя графический интерфейс), а затем вдруг добавляете потоки, принадлежащие серверу или клиенту? Похоже, у вас есть отдельные проблемы, но вы их смешиваете. Для части сообщения вам, очевидно, нужно как-то пометить широковещательные сообщения в своем протоколе, и это не имеет ничего общего с синхронизацией потоков. –
Благодарим вас за это, когда вы говорите «как-то пометить широковещательные сообщения», вы имеете в виду что-то вроде отправки логических данных до содержимого сообщения, которое может быть обнаружено на стороне клиента? @SergeyTachenov – marcuthh
Я не могу сказать, не зная подробностей вашего протокола. Это что-то, что вы можете переделать? Какой формат он использует? Может ли он быть расширен или переработан? Например, если он использует XML-сообщения, то просто добавление атрибута «broadcast = 'true» будет выполняться. «Отправка булевых до содержимого» также звучит похоже, хотя и слишком наивна для четко определенного протокола. –