Tạo ứng dụng chat đơn giản sử dụng Socket.IO trong Java

Hướng dẫn chi tiết cách tạo ứng dụng chat đơn giản bằng Java và Socket.IO. Bài viết này sẽ giúp bạn hiểu cách thiết lập server và client để giao tiếp theo thời gian thực.

Bài viết này sẽ hướng dẫn bạn cách xây dựng một ứng dụng chat đơn giản sử dụng Socket.IO trong Java. Chúng ta sẽ thiết lập server bằng Spring Boot và client bằng Java Swing để tạo giao diện người dùng. Ứng dụng sẽ cho phép người dùng gửi và nhận tin nhắn trong thời gian thực.

Mã Java:

1. Cài đặt server với Spring Boot

// build.gradle
plugins {
    id 'org.springframework.boot' version '3.0.0'
    id 'io.spring.dependency-management' version '1.0.12.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    implementation 'org.springframework.boot:spring-boot-starter'
}

tasks.named('test') {
    useJUnitPlatform()
}
// WebSocketConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/chat").withSockJS();
    }
}
// ChatController.java
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;

@Controller
public class ChatController {
    private final SimpMessagingTemplate messagingTemplate;

    public ChatController(SimpMessagingTemplate messagingTemplate) {
        this.messagingTemplate = messagingTemplate;
    }

    @MessageMapping("/send")
    public void sendMessage(String message) {
        messagingTemplate.convertAndSend("/topic/messages", message);
    }
}

2. Cài đặt client với Java Swing

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;

public class ChatClient extends WebSocketClient {
    private JTextArea textArea;
    private JTextField textField;

    public ChatClient(String serverUri, JTextArea textArea, JTextField textField) {
        super(new URI(serverUri));
        this.textArea = textArea;
        this.textField = textField;
    }

    @Override
    public void onOpen(ServerHandshake handshakedata) {
        System.out.println("Connected to server");
    }

    @Override
    public void onMessage(String message) {
        textArea.append(message + "\n");
    }

    @Override
    public void onClose(int code, String reason, boolean remote) {
        System.out.println("Disconnected from server");
    }

    @Override
    public void onError(Exception ex) {
        ex.printStackTrace();
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Chat Application");
        JTextArea textArea = new JTextArea(20, 30);
        JTextField textField = new JTextField(30);
        JButton sendButton = new JButton("Send");

        frame.getContentPane().add(new JScrollPane(textArea), "Center");
        frame.getContentPane().add(textField, "South");
        frame.getContentPane().add(sendButton, "South");

        ChatClient client = new ChatClient("ws://localhost:8080/chat", textArea, textField);
        client.connect();

        sendButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String message = textField.getText();
                client.send(message);
                textField.setText("");
            }
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

Giải thích chi tiết từng dòng code:

  1. Server:

    • WebSocketConfig: Cấu hình WebSocket với Spring Boot, cho phép sử dụng STOMP để gửi tin nhắn.
    • ChatController: Nhận và xử lý tin nhắn gửi từ client, gửi đến tất cả các client đã kết nối.
  2. Client:

    • ChatClient: Kết nối đến server WebSocket và quản lý việc gửi và nhận tin nhắn. Sử dụng Java Swing để tạo giao diện người dùng cho ứng dụng chat.

Yêu cầu hệ thống:

  • Java 17 trở lên
  • Spring Boot 3.0 trở lên
  • Thư viện WebSocket

Cách cài đặt các thư viện để chạy được đoạn mã Java trên:

Sử dụng Gradle để quản lý phụ thuộc. Chạy lệnh gradle build trong thư mục chứa build.gradle để cài đặt các thư viện cần thiết.

Lời khuyên:

  • Đảm bảo server đang chạy trước khi khởi động client.
  • Tìm hiểu thêm về STOMP để mở rộng tính năng của ứng dụng chat.
Tags: Java, Socket.IO


Các Hướng Dẫn Cùng Chủ Đề Đang Xem

Cách UPDATE dữ liệu trong database MySQL bằng Java

Hướng dẫn cách sử dụng Prepared Statements trong Java để cập nhật dữ liệu trong một bảng của database MySQL một cách an toàn và hiệu quả.
Danh sách các chức năng thường dùng khi sử dụng Selenium Chrome trong Java

Bài viết này liệt kê các chức năng thường sử dụng trong Selenium với ChromeDriver bằng Java, giúp người dùng nắm bắt nhanh các thao tác cơ bản để tự động hóa trình duyệt.
Cách ghi nội dung vào file Excel bằng Java

Hướng dẫn cách ghi dữ liệu vào file Excel bằng Java, sử dụng thư viện Apache POI để thao tác với file Excel một cách hiệu quả và đơn giản.
Cách truyền Authentication Header Token khi POST dữ liệu tới API bằng Java

Hướng dẫn cách truyền token xác thực (Authentication Header Token) khi gửi dữ liệu qua phương thức POST tới API bằng ngôn ngữ lập trình Java. Bài viết cung cấp mã Java mẫu và giải thích chi tiết.
Cách lấy dữ liệu JSON từ API bằng Java

Hướng dẫn này sẽ chỉ bạn cách sử dụng Java để gửi yêu cầu GET đến API và đọc dữ liệu JSON trả về bằng cách sử dụng HttpURLConnection.
Hướng dẫn tạo form upload nhiều hình ảnh bằng Java

Hướng dẫn chi tiết cách tạo form upload nhiều hình ảnh bằng Java sử dụng Spring Boot và thư viện `Commons FileUpload`. Bài viết bao gồm các bước cài đặt và ví dụ minh họa cụ thể.
Cách chuyển đổi chuỗi Markdown sang HTML bằng Java

Hướng dẫn chi tiết cách chuyển đổi một chuỗi Markdown sang HTML trong Java bằng cách sử dụng thư viện `commonmark`.
Cách SELECT dữ liệu từ database MySQL bằng Java

Hướng dẫn cách sử dụng Prepared Statements trong Java để truy vấn dữ liệu từ một bảng trong database MySQL một cách an toàn và hiệu quả.
Cách sử dụng Selenium để gửi đoạn mã JavaScript vào website trên Chrome

Hướng dẫn cách sử dụng Selenium trong Java để gửi đoạn mã JavaScript vào một trang web trên trình duyệt Chrome. Bài viết sẽ giúp bạn hiểu cách tương tác với DOM thông qua JavaScript.
Cách DELETE dữ liệu từ database MySQL bằng Java

Hướng dẫn cách sử dụng Prepared Statements trong Java để xóa dữ liệu từ một bảng trong database MySQL một cách an toàn và hiệu quả.

Đã thêm vào giỏ hàng