Tìm hiểu về kỹ thuật lập trình với giao thức TCP Socket Java.
Xem thêm:
ứng dụng chat client server java socket Swing
1. Lớp Socket
Khái niệm:
Dùng để tạo đối tượng socket cho phép truyền thông với giao thức TCP. Đối với UDP thường dùng lớp DatagramSocket.
Khởi tạo:
- public Socket(String host, int port)
- public Socket(InetAddress host, int port)
Một số phương thức lớp Socket:
| Phương thức | Mô tả |
| public InetAddress getInetAddress( ) | Phương thức cho phép trả về địa chỉ của máy trạm từ xa hiện đang kết nối với socket. |
| public int getPort( ) | Trả về số cổng trên máy trạm từ xa mà hiện đang kết nối với socket. |
| public int getLocalPort( ) | Trả về số cổng trên máy cục bộ. |
| public InputStream getInputStream( ) | Trả về số cổng trên máy trạm từ xa mà hiện đang kết nối với socket. |
| public OutputStream getOutputStream( ) | Trả về luồng xuất của socket là đối tượng OutputStream. |
| public void close( ) | Đóng socket. |
2. Lớp ServerSocket
Khái niệm:
Cho phép tạo đối tượng socket phía server và truyền thông theo giao thức TCP.
Sau khi nó được tạo nó sẽ được đặt ở trạng thái lắng nghe tín hiệu từ client gửi tới.
Khởi tạo:
- public ServerSocket(int port)
- public ServerSocket(int port, int queueLength)
Một số phương thức lớp ServerSocket:
| Phương thức | Mô tả |
| public Socket accept( ) | Đặt đối tượng Serversocket vào trạng thái chờ tín hiệu kết nối. |
| public void close( ) | Đóng socket và giải phóng tài nguyên đã cấp. |
3. Quy trình khởi tạo truyền thông với TCP Socket

4. Quy trình gửi và nhận giữa client và server
- Phía Server:
Bước 1: Tạo đối tượng ServerSocket với số hiệu cổng xác định
Bước 2: Đặt đối tượng ServerSocket ở trạng thái chờ tín hiệu từ client với phương thức accept()
Bước 3: Khai báo luồn nhập xuất cho đối tượng Socket
Bước 4: Truyền dữ liệu với client thông qua luồng nhập/ xuất
Bước 5: Server và client đóng kết nối
Bước 6: Trở về bước chờ kế tiếp
- Phía Client:
Bước 1: Tạo đối tượng socket có tham số server
Bước 2: Khai báo luồng nhập xuất cho Socket
Bước 3: Truyền dữ liệu qua luồng
Bước 4: Đóng Socket và giải phóng tài nguyên.
5. Chương trình gửi nhận giữa client và server
- Đối với chương trình cần chạy server trước khi chạy client.
- Một chương trình server có thể phục vụ cùng lúc nhiều client cùng lúc.
Code tham khảo:
public class demoServer {
public final static int SERVER_PORT = 9555;
public static void main(String[] args) {
String s, inStr;
try {
System.out.println("Dang doi ket noi...");
ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
Socket socket = serverSocket.accept();
boolean status = socket.isConnected();
if (status) {
System.out.println("Client da ket noi!");
new Thread(new Runnable() {
@Override
public void run() {
try {
//Nhan du lieu tu server
Scanner in = new Scanner(socket.getInputStream());
while (true) {
String inStr = in.nextLine();
System.out.println("Server: " + inStr);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
while (status) {
//Nhap du lieu tu ban phim
Scanner sc = new Scanner(System.in);
System.out.println("Message: ");
s = sc.nextLine();
//Gui du lieu cho client
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(s);
out.flush();
}
} else {
System.out.println("Loi");
}
socket.close();
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class demoClient {
public final static int SERVER_PORT = 9555;
public final static String SERVER_IP = "localhost";
public static void main(String[] args) {
String s;
try {
Socket socket = new Socket(SERVER_IP, SERVER_PORT);
boolean status = socket.isConnected();
if (status) {
System.out.println("Ket noi Server thanh cong!");
new Thread(new Runnable() {
@Override
public void run() {
try {
//Nhan du lieu tu server
Scanner in = new Scanner(socket.getInputStream());
while (true) {
String inStr = in.nextLine();
System.out.println("Server: " + inStr);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
while (status) {
//Nhap du lieu tu ban phim
Scanner sc = new Scanner(System.in);
System.out.println("Message: ");
s = sc.nextLine();
//Gui du lieu cho server
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(s);
out.flush();
}
} else {
System.out.println("Ket noi khong thanh cong");
}
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Trên đây là hướng dẫn lập trình với giao thức TCP Socket Java. Cảm ơn bạn đã tham khảo môn lập trình mạng trên ttnguyen.net.
Bài viết liên quan:
Server chuyển xâu thành chữ in hoa rồi gửi lại Client