Lập trình với giao thức TCP Socket Java | Từ a -z

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

gửi chuỗi đảo ngược cho client

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

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

phân tích n thành tích các số nguyên tố java socket

kiểm tra n được gửi từ Client có phải là số hoàn hảo

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em