Nối tiếp phần 1, phần 2 sách gồm 5 chương 6,7,8,9,10 lần lượt trình bày các thông tin với chủ đề về: Lập trình socket cho giao thức TCP, lập trình ứng dụng cho giao thức UDP, tuần tự hóa đối tượng và ứng dụng trong lập trình mạng, phân tán đối tượng bằng java RMI, xử lý cơ sở dữ liệu trong java. Mời các bạn cùng tìm hiểu giáo trình Lập trình mạng với ngôn ngữ java.
Chương Lập trình Socket cho giao thức TCP Mơ hình client/server Mơ hình phổ biến chấp nhận rộng rãi hệ thống phân tán mơ hình client/server Trong mơ hình có tập tiến trình mà tiến trình đóng vai trị trình quản lý tài nguyên cho tập hợp tài nguyên cho trước tập hợp tiến trình client tiến trình thực tác vụ cần truy xuất tới tài nguyên phần cứng phần mềm dùng chung Bản thân trình quản lý tài nguyên cần phải truy xuất tới tài nguyên dùng chung quản lý tiến trình khác, số tiến trình vừa tiến trình client vừa tiến trình server Các tiến trình phát yêu cầu tới server chúng cần truy xuất tới tài nguyên server Nếu yêu cầu đắn server thực hành động yêu cầu gửi đáp ứng trả lời tới tiến trình client Mơ hình client/server cung cấp cách tiếp cận tổng quát để chia sẻ tài nguyên hệ thống phân tán Mơ hình cài đặt nhiều môi trường phần cứng phần mềm khác Các máy tính sử dụng để chạy tiến trình client/server có nhiều kiểu khác không cần thiết phải phân biệt chúng; tiến trình client tiến trình server chạy máy tính Một tiến trình server sử dụng dịch vụ server khác Mô hình truyền tin client/server hướng tới việc cung cấp dịch vụ Quá trình trao đổi liệu bao gồm: Truyền yêu cầu từ tiến trình client tới tiến trình server Yêu cầu server xử lý Truyền đáp ứng cho client Mơ hình truyền tin liên quan đến việc truyền hai thông điệp dạng đồng hóa cụ thể client server Tiến trình server phải nhận thức thơng điệp yêu cầu bước đến hành động phát yêu cầu client phải tạm dừng (bị phong tỏa) buộc tiến trình client trạng thái chờ cho tớ nhận đáp ứng server gửi bước ba Mô hình client/server thường cài đặt dựa thao tác gửi (send) nhận (receive) 119 Sưu tầm bởi: www.daihoc.com.vn Client Server Request message Wait Reply Execution Request message Tiến trình xử lý Tiến trình phong tỏa Hình 4.1 Quá trình giao tiếp client server diễn theo t rong hai chế độ: bị phong tỏa (blocked) không bị phong tỏa (non-blocked) Chế độ bị phong tỏa (blocked): Trong chế độ bị phong tỏa, tiến trình client server phát lệnh gửi liệu (send), việc thực thi tiến trình bị tạm ngừng tiến trình nhận phát lệnh nhận liệu (receive) Tương tự tiến trình nhận liệu, tiến trình (client server) phát lệnh nhận liệu, mà thời điểm chưa có liệu gửi tới việc thực thi tiến trình bị tạm ngừng có liệu gửi tới Chế độ khơng bị phong tỏa (non-blocked) Trong chế độ này, tiến trình client hay server phát lệnh gửi liệu thực sự, việc thực thi tiến trình tiến hành mà khơng quan tâm đến việc có tiến trình phát lệnh nhận liệu hay khơng Tương tự cho trường hợp nhận liệu, tiến trình phát lệnh nhận liệu, nhận liệu có, việc thực thi tiến trình tiến hành mà khơng quan tâm đến việc có tiến trình phát lệnh gửi liệu hay không Các kiến trúc Client/Server 2.1 Client/Server hai tầng (two-tier client/server) Kiến trúc client/server đơn giản kiến trúc hai tầng Trong thực tế hầu hết kiến trúc client/server kiến trúc hai tầng Một ứng dụng hai tầng cung cấp nhiều trạm làm việc với tầng trình diễn thống nhất, tầng truyền tin với tầng lưu trữ liệu tập trung Tầng trình diễn thơng thường client, tầng lưu trữ liệu server Hầu hết ứng dụng Internet email, telnet, ftp chí Web ứng dụng hai tầng Phần lớn lập trình viên trình ứng dụng viết ứng dụng client/server có xu sử dụng kiến trúc 120 Sưu tầm bởi: www.daihoc.com.vn Trong ứng dụng hai tầng truyền thống, khối lượng cơng việc xử lý dành cho phía client server đơn giản đóng vai trị chương trình kiểm sốt luồng vào ứng dụng liệu Kết không hiệu ứng dụng bị giảm tài nguyên hạn chế PC, mà khối lượng liệu truyền mạng tăng theo Khi toàn ứng dụng xử lý PC, ứng dụng bắt buộc phải yêu cầu nhiều liệu trước đưa kết xử lý cho người dùng Nhiều yêu cầu liệu làm giảm hiệu mạng Một vấn đề thường gặp khác ứng dụng hai tầng vấn đề bảo trì Chỉ cần thay đổi nhỏ ứng dụng cần phải thay đổi lại toàn ứng dụng client server Hình 4.2 2.2 Client/Server ba tầng Ta tránh vấn đề kiến trúc client/server hai tầng cách mở rộng kiến trúc thành ba tầng Một kiến trúc ba tầng có thêm tầng tác biệt việc xử lý liệu vị trí trung tâm Hình 4.3 121 Sưu tầm bởi: www.daihoc.com.vn Theo kiến trúc ba tầng, ứng dụng chia thành ba tầng tách biệt mặt logic Tầng tầng trình diễn thường bao gồm giao diện đồ họa Tầng thứ hai, gọi tầng trung gian hay tầng tác nghiệp Tầng thứ ba chứa liệu cần cho ứng dụng Tầng thứ ba chương trình thực lời gọi hàm để tìm kiếm liệu cần thiết Tầng trình diễn nhận liệu định dạng để hiển thị Sự tách biệt chức xử lý với giao diện tạo nên linh hoạt cho việc thiết kế ứng dụng Nhiều giao diện người dùng xây dựng triển khai mà không làm thay đổi logic ứng dụng Tầng thứ ba chứa liệu cần thiết cho ứng dụng Dữ liệu bao gồm nguồn thơng tin nào, bao gồm sở liệu Oracale, SQL Server tài liệu XML 2.3 Kiến trúc n-tầng Kiến trúc n-tầng chia thành tầng sau: Tầng giao diện người dùng: quản lý tương tác người dùng với ứng dụng Tầng logic trình diễn: Xác định cách thức hiển thị giao diện người dùng yêu cầu người dùng quản lý Tầng logic tác nghiệp: Mơ hình hóa quy tắc tác nghiệp, Tầng dịch vụ hạ tầng: Cung cấp chức bổ trợ cần thiết cho ứng dụng thành phần (truyền thơng điệp, hỗ trợ giao tác) Mơ hình truyền tin socket Server Client Socket() Socket() Bind() Bind() Listen() Connect() Accept() Các chức gửi nhận Các chức gửi nhận Close() Close() Hình 4.4 122 Sưu tầm bởi: www.daihoc.com.vn Khi lập trình, ta cần quan tâm đến chế độ bị phong tỏa, dẫn đến tình tiến trình rơi vào vịng lặp vơ hạn q trình gửi nhận Trong chương biết hai giao thức TCP UDP giao thức tầng giao vận để truyền liệu Mỗi giao thức có ưu nhược điểm riêng Chẳng hạn, giao thức TCP có độ tin cậy truyền tin cao, tốc độ truyền tin bị hạn chế phải có giai đoạn thiết lập giải phóng liên kết truyền tin, gói tin có lỗi hay bị thất lạc giao thức TCP phải có trách nhiệm truyền lại,…Ngược lại, giao thức UDP có tốc độ truyền tin nhanh có chế truyền tin đơn giản: khơng cần phải thiết lập giải phóng liên kết Khi lập trình cho TCP ta sử dụng socket luồng, giao thức UDP ta sử dụng lớp DatagramSocket DatagramPacket Truyền tin hướng liên kết nghĩa cần có giai đoạn thiết lập liên kết giải phóng liên kết trước truyền tin Dữ liệu truyền mạng Internet dạng gói (packet) có kích thước hữu hạn gọi datagram Mỗi datagram chứa header payload Header chứa địa cổng cần truyền gói tin đến, địa cổng xuất phát gói tin, thông tin khác sử dụng để đảm bảo độ tin cậy truyền tin, payload chứa liệu Tuy nhiên datagram có chiều dài hữu hạn nên thường phải phân chia liệu thành nhiều gói khơi phục lại liệu ban đầu từ gói nơi nhận Trong q trình truyền tin có thể có hay nhiều gói bị hay bị hỏng cần phải truyền lại gói tin đến khơng theo trình tự Để tránh điều này, việc phân chia liệu thành gói, tạo header, phân tích header gói đến, quản lý danh sách gói nhận gói chưa nhận được, nhiều cơng việc cần phải thực hiện, đòi hỏi nhiều phần mềm phức tạp Thật may mắn, ta không cần phải tự thực công việc Socket cách mạng Berkeley UNIX Chúng cho phép người lập trình xem liên kết mạng luồng mà đọc liệu hay ghi liệu vào từ luồng Về mặt lịch sử Socket mở rộng ý tưởng quan trọng UNIX: tất thao tác vào/ra giống vào tệp tin người lập trình, cho dù ta làm việc với bàn phím, hình đồ họa, file thơng thường, hay liên kết mạng Các Socket che dấu người lập trình khỏi chi tiết mức thấp mạng mơi kiểu đường truyền, kích thước gói, u cầu truyền lại gói, địa mạng Một socket thực bảy thao tác bản: Kết nối với máy xa (ví dụ, chuẩn bị để gửi nhận liệu) Gửi liệu Nhận liệu Ngắt liên kêt Gán cổng Nghe liệu đến Chấp nhận liên kết từ máy xa cổng gán Lớp Socket Java sử dụng client server, có phương thức tương ứng với bốn thao tác Ba thao tác cuối cần cho server để chờ client liên kết với chúng Các thao tác cài đặt lớp ServerSocket Các socket cho client thường sử dụng theo mơ hình sau: Một socket tạo cách sử dụng hàm Socket() Socket cố gắng liên kết với host xa Mỗi liên kết thiết lập, host xa nhận luồng vào luồng từ socket, sử dụng luồng để gửi liệu cho Kiểu liên kết gọi 123 Sưu tầm bởi: www.daihoc.com.vn song cơng (full-duplex)-các host nhận gửi liệu đồng thời Ý nghĩa liệu phụ thuộc vào giao thức Khi việc truyền liệu hồn thành, hai phía ngắt liên kết Một số giao thức, HTTP, đòi hỏi liên kết phải bị đóng sau yêu cầu phục vụ Các giao thức khác, chẳng hạn FTP, cho phép nhiều yêu cầu xử lý liên kết đơn Socket cho Client 4.1 Các constructor public Socket(String host, int port) throws UnknownHostException, IOException Hàm tạo socket TCP với host cổng xác định, thực liên kết với host xa Ví dụ: try{ Socket s = new Socket( “www.vnn.vn”,80); } catch(UnknownHostException e){ System.err.println(e); } catch(IOException e){ System.err.println(e); } Trong hàm tham số host hostname kiểu String, host không xác định máy chủ tên miền khơng hoạt động constructor đưa ngoại lệ UnknownHostException Vì lý mà khơng thể mở socket constructor đưa ngoại lệ IOException Có nhiều nguyên nhân khiến cho liên kết thất bại: host mà ta cố gắng kết nối tới khơng chấp nhận liên kết, kết nối Internet bị ngắt, vấn đề định tuyến ngăn ngừa gói tin ta tới đích Ví dụ: Viết chương trình để kiểm tra 1024 cổng cổng có server hoạt động import java.net.*; import java.io.*; class PortScanner { public static void main(String[] args) { String host="localhost"; if(args.length>0){ host=args[0]; } for(int i=0;i