+2

Lập trình mạng với Java Swing + Socket

Xin chào mọi người trong bài này mình sẽ hướng dẫn các bạn thiết kế ra 1 form đơn giản có gửi nhận dữ liệu với Java Swing + Socket, IDE mình sử dụng là Eclipse mọi người nhé.

1. Cài đặt windowbuilder để lập trình giao diện Java Swing

Để cài đặt được windowbuilder trên Eclipse ta chọn Help -> Eclipse Marketplace Sau đó trên thanh tìm kiếm ta gõ tìm "windowbuilder" và nhấn cài đặt. Ở đây mình đã cài đặt rồi nên trạng thái hiển thị sẽ là Installed Sau khi đã cài đặt xong khi tạo mới 1 file ta nhấn vào package New -> Other Tiếp theo ta tìm đến WindowBuilder -> Swing Designer -> JFrame

Ta đặt tên cho file rồi nhấn Finish

Để có thể kéo thả ta chuyển sang tab Designer . Tại đây có rất nhiều thành phần, mọi người có thể lên mạng đọc thêm về các dùng ở đây mình sẽ đi qua nhanh về luồng từ dàn giao diện và kết nối với socket, đầu tiên layout mình sẽ chọn là GridBagLayout, tiếp đó mình kéo thêm 2 JLabel, 1 JtextFeild, 1 JButton Ta click vào từng phần tử để đặt Variable cho dễ thao tác và xử lý trong code Để gán sự kiện click chuột cho nút gửi ta nhấn chuột phải vào nút gửi -> Add event handler -> mouse -> mouseClicked Vầy là đã xong phần giao diện và gán sự kiện đơn giản. Tiếp theo ta sẽ xử lý phần code

2. Socket

2.1. Luồng truyền nhận dữ liệu

2.2. Khởi tạo đầu server

        ServerSocket server_socket = new ServerSocket(6543);
		/// Khởi tạo Socket và chấp nhận kết nối từ đối tượng Socket Server.
		Socket socket = server_socket.accept();
		/// Tạo luồng đọc dữ liệu vào từ client
		DataInputStream din = new DataInputStream(socket.getInputStream());
		// Tạo luồng in dữ liệu trả ra cho client
		DataOutputStream dout = new DataOutputStream(socket.getOutputStream());

2.3. Nhận tin và phản hồi

// Vòng lặp nghe dữ liệu từ client
while (true) {
try {
		String str_in = din.readUTF();
		System.out.println("client says: " + str_in);
		// Trả về kết quả
		dout.writeUTF("Server Received Data:"+str_in);
		dout.flush();
	} catch (IOException e1) {
		// TODO Auto-generated catch block
		status = false;
		e1.printStackTrace();
	}
}

2.4. Client kết nối và gửi tin

Socket client = new Socket("localhost",6543);
DataOutputStream dout = new DataOutputStream(client.getOutputStream());
DataInputStream din = new DataInputStream(client.getInputStream());
try {
		String message = txtNoiDung.getText().toString();
		dout.writeUTF(message);
		String output = din.readUTF();
		lbKq.setText(output);
} catch (IOException e2) {
		// TODO Auto-generated catch block
		e2.printStackTrace();
}

3. Source Code

Link: https://github.com/baonv-dev/socket_java_swing


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí