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