Quan sát hình trên chúng ta thấy rằng để tạo một ứng dụng mạng chạy bằng giao thức TCP chúng ta cần thiết lập hai ứng dụng riêng biệt: một ứng dụng Server và một ứng dụng cho Client.
Theo trình tự thời gian, ứng dụng phía máy chủ sẽ chạy trước và tạo ra một
ServerSocket trên cổng x để lắng nghe các kết nối từ phía máy khách.
Máy khách sẽ tạo ra một Socket để kết nối tới máy chủ hostid qua cổng x. Khi có yêu cầu kết nối, máy chủ sẽ chấp nhận kết nối bằng cách tạo ra một Socket qua phương thức accept(). Sau khi thiết lập kết nối máy chủ và máy khách có thể trao đổi dữ liệu thông qua các phương thức kiểm soát vào-ra của lớp Socket. Kết nối này sẽ tồn tại đến khi nào một trong hai bên hủy bỏ kết nối bằng cách đóng kết nối qua phương thức close() hoặc có sự cố về mạng.
5.6 Xử lý ngoại lệ trong lập trình mạng
Trong lập trình mạng nói chung, chúng ta thường xuyên gặp phải một số lỗi nhất định khi chạy chương trình. Có thể kể ra như lỗi xung đột cổng giữa các ứng dụng trên máy chủ, lỗi không kết nối được giữa các máy tính, lỗi không gửi/nhận dữ liệu được qua mạng…
Java định nghĩa một số ngoại lệ (Exception) để xử lý các sự cố này như:
IOException, UnknownHostException…
Để xử lý các ngoại lệ này chúng ta có hai cách:
¥! Sử dụng cú pháp try-catch: chúng ta nên dùng cách này để chủ động trong việc xử lý lỗi. Khi có lỗi xảy ra, chúng ta có thể có biện pháp khắc phục hợp lý hoặc thông báo lỗi cho người dùng biết.
¥! Sử dụng cú pháp throws cho các phương thức: sử dụng cách này là chúng ta giao cho các lớp xử lý ngoại lệ của Java xử lý giúp. Cách này chỉ nên dùng với những lỗi đơn giản hoặc ít gặp phải.
5.7 Một số ví dụ
Ví dụ 5-1. Viết chương trình kiểm tra một cổng trên máy chủ có đang hoạt động
hay không.
Cổng đang hoạt động được hiểu là cổng đang có một ứng dụng chạy trên đó. Có nghĩa là nó đang đóng vai trò là máy phục vụ trên cổng đó.
Việc thiết kế giao diện người dùng trong ví dụ này và các ví dụ sau được thực hiện trong phần mềm NetBeans. Chúng ta có thể sử dụng các công cụ khác để thiết kế hoặc tự sinh các đối tượng đồ họa bằng thư viện Swing và AWT.
Dùng Swing hoặc AWT thiết kế giao diện như sau, tên biến của các đối tượng đồ họa được chú thích ở cuối mũi tên.