





Preview text:
lOMoAR cPSD| 59092960
BÁO CÁO ĐỒ ÁN MÔN HỌC
ĐỀ TÀI: PHẦN MỀM CHAT ROOM BẰNG JAVA Tên:Vũ khánh toàn Lớp :th28.10 Msv:2823215598 LỜI NÓI ĐẦU
Ngày nay, thế giới đã có những bước phát triển mạnh mẽ về công nghệ thông tin (CNTT).
Từ một lĩnh vực tiềm năng, CNTT đã trở thành tài nguyên thực sự, một loại hàng hóa
quan trọng của xã hội hiện đại. Nó góp phần làm thay đổi cấu trúc kinh tế, cơ sở hạ tầng,
phương thức lao động, cũng như cách thức quản lý trong nhiều lĩnh vực khác nhau.
Tại Việt Nam, CNTT ngày càng đóng vai trò thiết yếu trong đời sống xã hội, đặc biệt là
trong công tác quản lý, xử lý thông tin, truyền thông và trao đổi dữ liệu. Một trong những
ứng dụng phổ biến nhất của CNTT là các phần mềm giao tiếp trực tuyến – tiêu biểu như phần mềm chat.
Song song với việc học tập lý thuyết, sinh viên cần thực hành và tiếp cận thực tế. Trong
quá trình học tập và nghiên cứu, em đã được thầy cô truyền đạt những kiến thức căn bản
và chuyên sâu, đồng thời rèn luyện tư duy độc lập và sáng tạo. Trên cơ sở đó, em quyết
định chọn và thực hiện đề tài “Phần mềm Chat Room” sử dụng ngôn ngữ lập trình Java,
với mong muốn ứng dụng những kiến thức đã học để xây dựng một ứng dụng giao tiếp
cơ bản nhưng hiệu quả.
CHƯƠNG 1: ĐẶT VẤN ĐỀ
1.1 Lý do chọn đề tài
Hiện nay, các phần mềm chat đã trở nên phổ biến trong mọi lĩnh vực: học tập, làm việc
nhóm, điều hành doanh nghiệp, cũng như trong đời sống hàng ngày. Chat không chỉ là
phương thức liên lạc nhanh chóng, tiết kiệm mà còn là cầu nối hiệu quả giữa con người
với con người thông qua internet.
Từ nhu cầu thực tế đó, em mong muốn xây dựng một phần mềm chat đơn giản, giúp
nhiều người có thể kết nối và trò chuyện với nhau thông qua mạng nội bộ hoặc internet.
Phần mềm không chỉ phục vụ nhu cầu học tập mà còn có thể phát triển để áp dụng vào thực tiễn. lOMoAR cPSD| 59092960
CHƯƠNG 2: NỘI DUNG CHÍNH
2.1 Phân tích và xây dựng chức năng - Phần Server:
+ Đóng vai trò trung tâm, nơi các client kết nối đến.
+ Nhận tin nhắn từ client và gửi đến các client khác.
+ Có chức năng thoát để dừng chương trình. - Phần Client:
+ Kết nối đến server để gửi và nhận tin nhắn.
+ Gửi tin nhắn đến server, đồng thời nhận lại tin nhắn từ các client khác qua server.
+ Có chức năng thoát khỏi ứng dụng.
2.2 Chi tiết đồ án 2.2.1 Mã nguồn Server package com.mycompany.chatserver; import java.io.*; import java.net.*; import java.util.*; public class ChatServer {
static Vector clients = new Vector<>();
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(1234);
System.out.println("Server đang chạy tại cổng 1234..."); while (true) {
Socket client = server.accept(); clients.add(client);
System.out.println("Client kết nối: " + client); new Thread(() -> { try {
BufferedReader in = new BufferedReader(new
InputStreamReader(client.getInputStream())); lOMoAR cPSD| 59092960 String msg; while ((msg = in.readLine()) != null) {
System.out.println("Nhận: " + msg); for (Socket s : clients) { if (s != client) {
PrintWriter out = new PrintWriter(s.getOutputStream(), true); out.println(msg); } } } } catch (IOException e) { e.printStackTrace(); } }).start(); } } }
2.2.2 Mã nguồn Client package com.mycompany.chatclient; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class ChatClient { private JFrame frame; private JPanel chatPanel; private
JTextField inputField; private PrintWriter out;
public ChatClient(String username) {
frame = new JFrame("Chat - " + username); chatPanel = new JPanel();
chatPanel.setLayout(new BoxLayout(chatPanel, BoxLayout.Y_AXIS));
chatPanel.setBackground(Color.WHITE); lOMoAR cPSD| 59092960
JScrollPane scrollPane = new JScrollPane(chatPanel);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ ALWAYS);
inputField = new JTextField();
inputField.setFont(new Font("Segoe UI", Font.PLAIN, 14));
inputField.addActionListener(e -> {
String msg = inputField.getText(); if (!msg.isEmpty()) {
addMessage("Tôi: " + msg, Color.CYAN, FlowLayout.RIGHT);
out.println(username + ": " + msg); inputField.setText(""); } });
frame.setLayout(new BorderLayout());
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(inputField, BorderLayout.SOUTH); frame.setSize(400, 500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); try {
Socket socket = new Socket("localhost", 1234);
out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream())); new Thread(() -> { try { String line;
while ((line = in.readLine()) != null) {
addMessage(line, new Color(220, 248, 198), FlowLayout.LEFT); } } catch (IOException ex) { ex.printStackTrace(); } }).start(); lOMoAR cPSD| 59092960 } catch (IOException e) {
JOptionPane.showMessageDialog(frame, "Không thể kết nối tới server."); System.exit(0); } }
private void addMessage(String msg, Color bgColor, int align) { JPanel bubble = new JPanel();
bubble.setLayout(new FlowLayout(align));
JLabel label = new JLabel("
" + msg + "
"); label.setOpaque(true); label.setBackground(bgColor);
label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); bubble.add(label); chatPanel.add(bubble); chatPanel.revalidate(); chatPanel.repaint(); }
public static void main(String[] args) {
String username = JOptionPane.showInputDialog("Nhập tên:");
if (username != null && !username.isEmpty()) {
SwingUtilities.invokeLater(() -> new ChatClient(username)); } } }
2.2.3 Cơ sở dữ liệu -- Bảng người dùng CREATE TABLE users ( id INT
AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Bảng tin nhắn lOMoAR cPSD| 59092960
CREATE TABLE messages ( id INT
AUTO_INCREMENT PRIMARY KEY, sender
VARCHAR(100) NOT NULL, receiver
VARCHAR(100), message TEXT NOT NULL,
sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
CHƯƠNG 3: KẾT LUẬN Ưu điểm:
+ Giao diện thân thiện, dễ sử dụng.
+ Chức năng gửi và nhận tin nhắn hoạt động ổn định.
+ Dễ dàng mở rộng và tích hợp thêm các tính năng khác (gửi file, gửi ảnh,...).
+ Phù hợp với mục tiêu học tập và ứng dụng ở cấp độ cơ bản. Nhược điểm:
+ Chưa tích hợp tính năng nâng cao như lưu lịch sử, bảo mật, tạo nhóm,...
+ Giao diện còn đơn giản, chưa đạt độ thẩm mỹ cao.
+ Do thời gian nghiên cứu có hạn, một số ý tưởng vẫn chưa được triển khai hoàn thiện.
Em xin gửi lời cảm ơn chân thành đến các thầy cô đã tận tình hướng dẫn em trong quá
trình thực hiện đề tài này. Dù đã cố gắng hết sức, nhưng với kiến thức và kinh nghiệm
còn hạn chế, chắc chắn báo cáo vẫn còn nhiều thiếu sót. Em mong nhận được sự góp ý và
phản hồi từ quý thầy cô và bạn bè để đề tài được hoàn thiện hơn trong tương lai.
Em xin chân thành cảm ơn!