TCP-клиент с использованием Spring Boot Web

Я занимаюсь разработкой веб-приложения с использованием Spring Boot Web и хочу установить связь с сервером сокетов TCP, используя IP и порт (подключение, отправка, получение и отключение).

Я новичок в Spring Boot и много дней искал в интернете без каких-либо результатов, и решение Websocket в этом случае не будет работать.

ОБНОВЛЕНИЕ (пожалуйста, подтвердите) Я думаю, что я могу использовать стандартные java.io.* и java.net.* В Spring Boot Web juste, как и любую другую Java-программу:

    try {
            try (Socket clientSocket = new Socket(IP, PORT);
                PrintWriter out = new PrintWriter(
                        clientSocket.getOutputStream(), true);
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(
                                clientSocket.getInputStream()))) {

            System.out.println("Connected to server");

            String str = "test";                                
            out.write(str);
            out.flush();

            char[] cbuf = new char[size];            
            br.read(cbuf, 0, size);
            System.out.println(cbuf);

        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }

1 ответ

Это моя собственная версия простого tcp-клиента, разработанного для SpringBoot.

Сначала вы должны открыть соединение с помощью метода openConnection(). Затем вы можете отправлять сообщения с помощью метода sendMessage() и получать сообщения с помощью метода takeMessage().

@Service("socketClient")

public class SocketClient {
    @Value("brain.connection.port")
    int tcpPort;
    @Value("brain.connection.ip")
    String ipConnection;
    private Socket clientSocket;

    private DataOutputStream outToTCP;
    private BufferedReader inFromTCP;

    private PriorityBlockingQueue<String> incomingMessages = new PriorityBlockingQueue<>();
    private PriorityBlockingQueue<String> outcomingMessages = new PriorityBlockingQueue<>();

    private final Logger log = LoggerFactory.getLogger(this.getClass());

    private Thread sendDataToTCP = new Thread(){
        public void run(){
            String sentence = "";
            log.info("Starting Backend -> TCP communication thread");
            while(true){
                try {
                    sentence = incomingMessages.take();
                    outToTCP.writeBytes(sentence + '\n');
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
    };

    private Thread getDataFromTCP = new Thread(){
        public void run(){
            log.info("Starting TCP -> Backend communication thread");
            while(true){
                String response = "";
                try {
                    response = inFromTCP.readLine();
                    if (response == null)
                        break;
                    outcomingMessages.put(response);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    };

    public void openConnection(){
        try {
            this.clientSocket = new Socket(ipConnection, tcpPort);
            outToTCP = new DataOutputStream(clientSocket.getOutputStream());
            inFromTCP = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            getDataFromTCP.start();
            sendDataToTCP.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //Send messages to Socket.
    public void sendMessage(String message) throws InterruptedException {
        incomingMessages.put(message);
    }
    //Take Message from Socket
    public String takeMessage() throws InterruptedException {
        return outcomingMessages.take();
    }
}
Другие вопросы по тегам