Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Работа с сетью > SocketServer. Передача информации нескольким клиен |
Автор: Michael.de 26.6.2023, 14:46 | ||||||
У меня есть вопрос, который появился из-за изменения задачи, описанной в >>https://forum.vingrad.ru/topic-396955.html<< Запускается Socket-сервер. Он генерирует default.ini с некоторыми параметрами, в том числе и со своим IP. Этот сгенерированный файл переносится на несколько клиентов, которые затем также запускаются. Клиенты есть двух типов: Recorder (считывает состояние камер и пересылает информацию на сервер) и Display (получает информацию от сервера и отображает её). Клиентов каждого типа может быть несколько. Изначально было всего один сервер и один клиент. Клиент считывал состояния камер, пересылал всё серверу, который всё отображал. И всё прекрасно работало, пока было всего 1 соединение... а сейчас их несколько. Я набросал рабочий пример, но остаётся проблема, что я могу с сервера ответить клиенту, передавшему ему информацию... а как мне переслать её другим клиентам?
|
Автор: LSD 26.6.2023, 23:38 |
|
Автор: Michael.de 27.6.2023, 09:43 |
LSD, возможно. Я уже лет 10 как системным администратором работаю и мои Java знания остались на уровне 7-8 версии. За пример спасибо, буду разбираться ![]() |
Автор: SVN74 9.7.2023, 21:55 |
ClientThread st = new ClientThread(serverClient, counter); // list.add(sct); // а дальше? ![]() st.run(); надо в Thread запускать: Thread t = new Thread(new ClientThread(serverClient, counter)); t.start(); Добавлено через 3 минуты и 14 секунд try { DataInputStream inStream = new DataInputStream(serverClient.getInputStream()); DataOutputStream outStream = new DataOutputStream(serverClient.getOutputStream()); String clientMessage = ""; String serverMessage = ""; while (!clientMessage.equals("exit")) { clientMessage = inStream.readUTF(); serverMessage = "From Server to Client-" + clientNumber +": you've sent a message \""+ clientMessage + "\""; System.out.println("From Client-" + clientNumber+ ": message \"" + clientMessage + "\" received :"); outStream.writeUTF(serverMessage); outStream.flush(); } inStream.close(); outStream.close(); serverClient.close(); } catch(IOException e) { e.printStackTrace(); } finally { System.out.println("Client -" + clientNumber + " exit!"); } } -- Используйте try с ресурсами, - могут не закрыться потоки... Добавлено через 7 минут и 15 секунд DataInputStream inStream = new DataInputStream(serverClient.getInputStream()); DataOutputStream outStream = new DataOutputStream(serverClient.getOutputStream()); -> catch(IOException e) { e.printStackTrace(); ----- ДатаСтримы могут возвращать конец связи как ошибку, - надо обрабатывать и EOFException ... |