Lập trình socket trong java trên linux
Khái niệm lập trình mạng (network programming) nói về viết các chương trình mà thực thi qua nhiều thiết bị (máy tính), trong đó các thiết bị này được kết nối mạng với nhau. Show Gói java.net của J2SE API chứa một tập hợp các class và interface mà cung cấp chi tiết về giao tiếp tầm thấp, cho phép bạn viết các chương trình mà trọng tâm vào giải quyết vấn đề trong tầm tay. Gói java.net cung cấp sự hỗ trợ cho hai giao thức mạng phổ biến:
Chương này giúp bạn hiểu sâu về hai chủ đề trong Java:
Lập trình Socket trong JavaCác Socket cung cấp kỹ thuật giao tiếp giữa hai máy tính sử dụng TCP. Một chương trình Client tạo một socket trên đầu cuối của giao tiếp và cố gắng để kết nối socket đó tới một Server. Khi kết nối được tạo, Server tạo một đối tượng Socket trên đầu cuối của giao tiếp. Client và Server bây giờ có thể giao tiếp bằng việc đọc và ghi từ Socket. Lớp java.net.Socket biểu diễn một Socket, và lớp java.net.ServerSocket cung cấp một kỹ thuật cho chương trình Server để nghe thông tin từ các Client và thành lập các kết nối với chúng. Các bước sau xảy ra khi thành lập một kết nối TCP giữa hai máy tính sử dụng Socket:
Sau khi các kết nối được thành lập, giao tiếp có thể xảy ra bởi sử dụng I/O stream. Mỗi Socket có cả một OutputStream và InputStream. OutputStream của Client được kết nối với InputStream của Server, và InputStream của Client được kết nối với OutputStream của Server. TCP là một giao thức giao tiếp hai chiều, vì thế dữ liệu có thể được gửi qua cả hai luồng tại cùng một thời điểm. Các lớp hữu ích sau đây cung cấp đầy đủ các phương thức để triển khai các Socket. Các phương thức lớp ServerSocket trong JavaLớp java.net.ServerSocket trong Java được sử dụng bởi các ứng dụng Server để thu nhận một cổng và nghe các yêu cầu từ Client. Lớp ServerSocket có 4 constructor sau:
Nếu ServerSocket constructor không ném một exception, nghĩa là ứng dụng của bạn đã thành công kết nối tới cổng đã xác định và sẵn sàng cho các yêu cầu của Client. Bảng dưới liệt kê các phương thức phổ biến của lớp ServerSocket trong Java:
Khi ServerSocket gọi phương thức accept(), phương thức này không trả về giá trị tới khi một Client kết nối. Sau khi một Client kết nối, ServerSocket tạo một Socket mới trên một cổng chưa được xác định và trả về một tham chiếu tới Socket mới này. Bây giờ, một kết nối TCP tồn tại giữa Client và Server, và giao tiếp có thể bắt đầu. Các phương thức lớp Socket trong JavaLớp java.net.Socket biểu diễn socket mà cả Client và Server sử dụng để kết nối với nhau. Client thu nhận một đối tượng Socket bằng việc khởi tạo nó, trong khi Server thu nhận một đối tượng Socket từ giá trị trả về của phương thức accept(). Lớp Socket có 5 constructor mà một Client sử dụng để kết nối tới một Server:
Khi Socket constructor trả về giá trị, nó không đơn giản chỉ khởi tạo một đối tượng Socket mà nó còn thực sự cố gắng kết nối tới Server và cổng đã xác định. Một số phương thức của lớp Socket đáng quan tâm được liệt kê dưới đây. Chú ý rằng, cả Server và Client đều có một đối tượng Socket, vì thế những phương thức này có thể được gọi bởi cả Client và Server.
Các phương thức lớp InetAddress trong JavaLớp này biểu diễn một địa chỉ Internet Protocol (IP). Dưới đây liệt kê một số phương thức hữu ích mà bạn sẽ cần trong khi lập trình Socket.
Ví dụ về Socket Client trong Java GreetingClient sau là một chương trình Client kết nối tới một Server bởi sử dụng một Socket và gửi một lời chào, và sau đó đợi một phản hồi.
Ví dụ về Socket Server trong JavaChương trình GreetingServer sau là ví dụ về một ứng dụng Server sử dụng lớp Socket để lắng nghe các Client trên một số hiệu cổng đã xác định bởi một tham số dòng lệnh.
Biên dịch Client và Server và sau đó bắt đầu Server như sau:
Kiểm tra chương trình Client như sau: |