сделай задание на Java TCP брокер сообщений Написать брокер сообщений, который работает по сети (TCP). Для проверки написать клиента, который создает отправителей и получателей сообщений.
Протокол работы
Пример:
send test1\n
оправка команды на подключение клиента в качестве отправителя к очереди test1
Отправителей и получателей для очереди может быть любое количество. Если сервер не обнаруживает очереди с указанным именем при получении команды на установку соединения он создает её. Сообщение отправленное отправителем может быть получено только одним получателем.
Пример: message 12\nHello world!
В данном формате происходит отправка сообщений от отправителя к серверу и от сервера к получателю.
При отчете за работу позже 13 ноября бал снижается При отчете за работу позже 4 декабря бал снижается на 2
Sure! Here's a prompt you use for training a language model on creating message broker using Java and TCP protocol:
"Write a Java program to implement a TCP-based message broker. The message broker should support the following protocol:
Connection Establishment:
Example:
send test1\n
This command indicates that the client wants to connect as a sender to the 'test1'.
Message Transmission:
Example:
message 12\nHello world!
format is used for both sending messages from the sender to the server and from the server to the receiver.
Additionally, any report submitted after November 13th will result in a deduction of points. Furthermore, reports submitted after December th will lead to a deduction of 2 points."
Feel free to use this prompt to train your language model!
Напиши программу на Java следую тз: TCP брокер сообщений Написать брокер сообщений, который работает по сети (TCP). Для проверки написать клиента, который создает отправителей и получателей сообщений.
Протокол работы
Пример:
send test1\n
оправка команды на подключение клиента в качестве отправителя к очереди test1
Отправителей и получателей для очереди может быть любое количество. Если сервер не обнаруживает очереди с указанным именем при получении команды на установку соединения он создает её. Сообщение отправленное отправителем может быть получено только одним получателем.
Пример: message 12\nHello world!
В данном формате происходит отправка сообщений от отправителя к серверу и от сервера к получателю.
При отчете за работу позже 13 ноября бал снижается При отчете за работу позже 4 декабря бал снижается на 2
Вот примеры простого TCP брокера сообщений и клиента на Java.
MessageBroker.java:
import java.io.*; import java.net.*; import java.util.concurrent.*; public class MessageBroker { private ServerSocket serverSocket; private final ConcurrentHashMap<String, BlockingQueue<String>> messageQueues; public MessageBroker(int port) throws IOException { serverSocket = new ServerSocket(port); messageQueues = new ConcurrentHashMap<>(); } public void start() { System.out.println("Broker started. Listening on port " + serverSocket.getLocalPort()); while (!serverSocket.isClosed()) { try { Socket clientSocket = serverSocket.accept(); new ClientHandler(clientSocket).start(); } catch (IOException e) { System.out.println("Broker error: " + e.getMessage()); } } } private class ClientHandler extends Thread { private Socket clientSocket; private PrintWriter out; private BufferedReader in; public ClientHandler(Socket socket) { this.clientSocket = socket; } public void run() { try { out = new PrintWriter(clientSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String inputLine = in.readLine(); if (inputLine != null) { String[] commands = inputLine.split(" "); if (commands.length == 2) { String command = commands[0]; String queueName = commands[1]; messageQueues.putIfAbsent(queueName, new LinkedBlockingQueue<>()); if ("send".equals(command)) { while ((inputLine = in.readLine()) != null) { if (inputLine.startsWith("message")) { String[] parts = inputLine.split(" ", 3); if (parts.length == 3) { messageQueues.get(queueName).put(parts[2].trim()); out.println("Message received"); } } } } else if ("receive".equals(command)) { String message = messageQueues.get(queueName).take(); // Blocks until a message is available out.println(message); } } } } catch (IOException | InterruptedException e) { System.out.println("Client handler error: " + e.getMessage()); } finally { try { if (out != null) out.close if (in != null) in.close(); clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) throws IOException { int port = 6666; MessageBroker broker = new MessageBroker(port); broker.start(); } }
MessageClient.java:
import java.io.*; import java.net.*; public class MessageClient { private Socket clientSocket; private PrintWriter out; private BufferedReader in; public void startConnection(String ip, int port) throws IOException { clientSocket = new Socket(ip, port); out = new PrintWriter(clientSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); } public void sendMessage(String mode, String queueName, String message) throws IOException { out.println(mode + " " + queueName + "\n"); out.println("message " + message.length() + "\n" + message); } public String receiveMessage(String mode, String queueName) throws IOException { out.println(mode + " " + queueName + "\n"); return in.readLine(); } public void stopConnection() throws IOException { in.close(); out.close(); clientSocket.close(); } public static void main(String[] args) throws IOException { MessageClient client = new MessageClient(); client.startConnection("127.0.0.1", 6666); // Send a message to queue 'test1' client.sendMessage("send", "test1", "Hello World!"); // Receive a message from queue 'test1' System.out.println(client.receiveMessage("receive", "test1")); client.stopConnection(); } }
Запустите MessageBroker
, а затем MessageClient
для отправки и получения сообщения. Учтите, что код представлен в учебных целях и может потребовать дополнительной работы, чтобы полностью соответствовать ТЗ, обработки ошибок и поддержки множественных клиентов.