Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 203 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
203
Dung lượng
1,67 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC KỸ THUẬT CƠNG NGHỆ TP HCM GIÁO TRÌNH LẬP TRÌNH MẠNG Lưu hành nội Ths VĂN THIÊN HOÀNG Thành phố Hồ Chí Minh 2009 MỤC LỤC MỞ ĐẦU U Chương TỔNG QUAN VỀ LẬP TRÌNH MẠNG 12 1.1 Chức chương trình mạng .12 1.2 Mạng máy tính 12 1.3 Mơ hình phân tầng 13 1.3.1 Mơ hình OSI .13 1.3.2 Mô hình TCP/IP 15 1.4 Các giao thức mạng 15 1.4.1 TCP-Transmission Control Protocol 16 1.4.2 UDP-User Datagram Protocol 17 1.4.3 IP-Internet Protocol 19 1.5 Mơ hình khách/chủ (client/server) .22 1.6 Socket 22 1.7 Dịch vụ tên miền 22 1.7.1 Các server tên miền 23 1.7.2 Nslookup .24 1.8 Các vấn đề liên quan Internet 25 1.8.1 Intranet Extranet 25 1.8.2 Firewall .25 1.8.3 Proxy Server 25 1.9 Bài tập .26 Chương NGÔN NGỮ LẬP TRÌNH JAVA 27 2.1 Giới thiệu 27 2.2 Mơi trường lập trình Java 27 2.3 Một số ví dụ mở đầu 28 2.4 Các thành phần ngơn ngữ lập trình Java 30 2.4.1 Định danh 30 - ii - 2.4.2 Các kiểu liệu nguyên thủy (primitive datatype) 30 2.4.3 Khai báo biến 31 2.4.4 Các câu lệnh 32 2.5 Lớp đối tượng .37 2.5.1 Cú pháp định nghĩa lớp đối tượng .37 2.5.2 Cú pháp định nghĩa phương thức 38 2.5.3 Hàm khởi tạo - Constructor 38 2.5.4 Tham chiếu this 40 2.5.5 Thừa kế .40 2.5.6 Từ khóa super 41 2.5.7 Truyền tham số Java 42 2.5.8 Đa hình 42 2.5.9 Thành phần tĩnh 43 2.5.10 Các thành phần (final) 45 2.6 Lớp trừu tượng 46 2.7 Giao diện (Interface) 48 2.8 Gói (Package) .50 2.9 Quản lý ngoại lệ (Exception Handling) 51 2.9.1 Lệnh kiểm soát ngoại lệ 51 2.9.2 Tổ chức lớp biểu diễn ngoại lệ 53 2.9.3 Phát sinh ngoại lệ 54 2.9.4 Sự lan truyền ngoại lệ 59 2.9.5 Các phương thức lớp Exception 59 2.9.6 Lớp ngoại lệ tự định nghĩa 61 2.9.7 Overriding với exception 63 2.10 Bài tập .64 Chương QUẢN LÝ CÁC LUỒNG VÀO RA 66 3.1 Giới thiệu 66 3.2 Các luồng Byte 67 - iii - 3.2.1 Các luồng byte tổng quát 68 3.2.2 Các luồng đọc byte thực 69 3.2.3 Các ví dụ .71 3.3 Các luồng ký tự 75 3.3.1 Các luồng ký tự tổng quát 76 3.3.2 Các luồng ký tự thực 78 3.3.3 Các ví dụ .81 3.4 Các luồng lọc liệu (Filter Stream) .82 3.4.1 Các luồng lọc tổng quát 83 3.4.2 Các luồng lọc thực 83 3.5 Các luồng đệm liệu 85 3.6 Các lớp định dạng luồng liệu nhập/xuất .89 3.7 Tuần tự hóa đối tượng (object serialization) 92 3.8 Luồng viết đối tượng 93 3.9 Bài tập .96 Chương 4.1 LẬP TRÌNH ĐA TUYẾN 97 Giới thiệu 97 4.1.1 Đơn tuyến trình 97 4.1.2 Đa tiến trình 97 4.2 Tiến trình 98 4.3 Lớp Thread 98 4.4 Quản lý Thread 99 4.4.1 Tạo Thread 99 4.4.2 Chỉnh độ ưu tiên 100 4.4.3 Thực thi thread 100 4.4.4 Dừng thread .100 4.4.5 Một số phương thức quản ký khác lớp Thread 101 4.5 Interface Runnable 102 4.6 Đồng 103 - iv - 4.6.1 Đồng hóa sử dụng cho phương thức 103 4.6.2 Lệnh synchronized 105 4.7 Trao đổi liệu thread .106 4.8 Nhóm tuyến trình –ThreadGroup .107 4.8.1 Tạo nhóm tuyến trình .108 4.8.2 Sử dụng nhóm tuyến trình 109 4.8.3 Minh họa lớp ThreadGroup 110 4.9 Bài tập .111 Chương QUẢN LÝ ĐNA CHỈ KẾT N ỐI MẠN G VỚI CÁC LỚP IN ETADDRES, URL VÀ URLCON N ECTION 112 5.1 Lớp InetAddress .112 5.1.1 Tạo đối tượng InetAddress 113 5.1.2 Các thao tác đối liệu đối tượng InetAddress 114 5.1.3 Các phương thức kiểm tra địa IP 116 5.2 Lớp URL 116 5.2.1 Tạo URL .117 5.2.2 N hận thông tin thành phần URL 118 5.2.3 N hận liệu từ máy đích URL .121 5.3 Lớp URLConnection 123 Chương LẬP TRÌN H SOCKET CHO THỨC TCP 127 6.1 Mơ hình client/server 127 6.2 Mơ hình truyền tin socket .128 6.3 TCP client - Socket 130 6.3.1 Các hàm khởi tạo lớp Socket 130 6.3.2 Các phương thức phục vụ giao tiếp Socket 132 6.3.3 Các phương thức đóng Socket 133 6.3.4 Các phương thức thiết lập tùy chọn cho Socket 134 6.3.5 Một số ví dụ chương trình client giao tiếp số dịch vụ chuNn 135 -v- 6.4 Lớp ServerSocket .135 6.4.1 Các constructor 136 6.4.2 Chấp nhận ngắt liên kết 137 6.5 Các bước cài đặt chương trình phía Client Java 140 6.6 Các bước để cài đặt chương trình Server Java 142 6.7 Ứng dụng đa tuyến đoạn lập trình Java 145 6.8 Kết luận 150 Chương 7.1 LẬP TRÌN H ỨN G DỤN G CHO GIAO THỨC UDP 151 Tổng quan giao thức UDP 151 7.1.1 Một số thuật ngữ UDP 151 7.1.2 Hoạt động giao thức UDP 153 7.1.3 Các nhược điểm giao thức UDP .153 7.1.4 Các ưu điểm UDP .154 7.1.5 Khi nên sử dụng UDP 155 7.2 Lớp DatagramPacket 156 7.2.1 Các constructor để nhận datagram 157 7.2.2 Constructor để gửi datagram 157 7.2.3 Các phương thức nhận thông tin từ DatagramPacket .158 7.3 Lớp DatagramSocket 160 7.4 N hận gói tin 161 7.5 Gửi gói tin 163 7.6 Ví dụ minh họa giao thức UDP 164 7.7 Kết luận 173 Chương TUẦN TỰ HÓA ĐỐI TƯỢN G VÀ ỨN G DỤN G TRON G LẬP TRÌN H MẠN G 174 8.1 Tuần tự hóa đối tượng 174 8.1.1 Khái niệm 174 8.1.2 1.2 Khả (Serializable) 175 8.1.3 Xây dựng lớp lớp khả 176 - vi - 8.1.4 8.2 Cơ chế đọc ghi đối tượng thiết bị lưu trữ ngồi 176 Truyền đối tượng thơng qua Socket 178 8.2.1 Lớp Socket 178 8.2.2 Lớp ServerSocket 178 8.2.3 Truyền nhận liệu mơ hình lập trình Socket 179 8.2.4 Ví dụ minh họa 180 8.3 Truyền đối tượng thông qua giao thức UDP 183 8.4 Kết luận 186 Chương PHÂN TÁN ĐỐI TƯỢN G TRON G JAVA BẰN G RMI 187 9.1 Tổng quan .187 9.2 Mục đích RMI 188 9.3 Một số thuật ngữ .188 9.4 Các lớp trung gian Stub Skeleton 189 9.5 Cơ chế hoạt động RMI .189 9.6 Kiến trúc RMI 193 9.7 Cài đặt chương trình .194 9.7.1 Cài đặt chương trình phía Server 195 9.8 Triển khai ứng dụng 197 9.9 Các lớp giao tiếp gói java.rmi 198 9.9.1 Giao tiếp Remote 198 9.9.2 Lớp N aming 198 9.10 Các lớp giao tiếp gói java.rmi.registry 199 9.10.1 Giao tiếp Registry .200 9.10.2 Lớp LocateRegistry 200 9.11 Các lớp giao tiếp gói java.rmi.server 201 9.11.1 Lớp RemoteObject 201 9.11.2 Lớp RemoteServer 201 9.11.3 Lớp UnicastRemoteObject 202 - vii - 9.12 Kết luận 202 TÀI LIỆU THAM KHẢO 203 - viii - MỞ ĐẦU Hiện nay, mạng máy tính cơng nghệ của thời đại Các ứng dụng mạng đóng vai trị khơng thể thiếu để khai thác tiềm mạng máy tính, đặt biệt mạng Internet Do vậy, lập trình mạng môn học thiếu sinh viên ngành cơng nghệ thơng tin nói chung sinh viên chun ngành mạng nói riêng Mục đích mơn học lập trình mạng cung cấp cho sinh viên biết kiến thức mạng liên quan chế hoạt động kiến trúc phần mềm mạng Từ đó, sinh viên hiểu biết cách viết chương trình ứng dụng hệ thống mạng quy mơ nhỏ mạng Internet Java ngôn ngữ lập trình hướng đối tượng túy với nhiều đặc trưng ưu việt so với ngơn ngữ lập trình hướng đối tượng khác tính độc lập với nên, tính bảo mật,… Java cung cấp thư viện hỗ trợ lập trình mạng đơn giản hiệu Giáo trình thiết kế để cung cấp cho sinh viên kiến để biết phát triển ứng dụng theo mơ hình khách/chủ dựa vào TCP/IP Socket Đồng thời, số kiến thức hỗ trợ lập trình phân tán trang bị Giáo trình bao gồm 10 chương: • Chương 1: Giới thiệu vai trị chương trình mạng, khái niệm mạng máy tính, kiến thức liên quan để người đọc tiếp cận với chương • Chương 2: Giới thiệu ngơn ngữ lập trình Java Trình bày thành phần bản, thư viện hỗ trợ có sẵn chế xử lý ngoại lệ Sinh viên tiếp cận học ngơn ngữ lập trình Java học ôn tập để hiểu viết ứng dụng Java • Chương 3: Các luồng vào Chương giới thiệu khái niệm vào luồng liệu Trước tiên ta tìm hiểu luồng ý nghĩa luồng chương trình Java Tiếp đến tìm hiểu luồng vào chuNn gói làm việc với console Các luồng trừu tượng java.io.InputStream, java.io.OutputStream luồng để từ xây dựng nên luồng cụ thể Luồng chia thành nhóm luồng byte luồng ký tự Từ phiên Java 1.4 đặc trưng vào Java đưa vào giới thiệu -9- chương Việc nắm vững kiến thức chương giúp cho việc lập trình ứng dụng mạng trở nên đơn giản thực chất việc truyền nhận liệu ứng dụng mạng việc đọc ghi luồng • Chương 4: Lập trình đa tuyến đoạn Trong ngơn ngữ lập trình trước ứng dụng hầu hết ứng dụng đơn tuyến đoạn Để tăng tốc độ xử lý giải vấn đề tương tranh ứng dụng nói chung ứng dụng mạng nói riêng ta cần sử dụng khái niệm đa tuyến đoạn Phần đầu chương trình bày khái niệm tiến trình, tuyến đoạn Tiếp đến xem xét cách cài đặt ứng dụng tuyến đoạn Java lớp Thread thực thi giao tiếp Runnable Sau ta vào tìm hiểu phương thức lớp Thread Sự đồng hóa cách cài đặt chương trình đồng hóa giới thiệu chương • Chương 5: Lập trình mạng với lớp InetAddress, URL URLConnection Lớp InetAddress lớp lập trình mạng mà ta cần tìm hiểu N ó cách chương trình Java tương tác với hệ thống tên miền Tiếp đến ta vào tìm hiểu khái niệm URI, URL,URN lớp biểu diễn URL Java Cách sử dụng URL để tải thông tin tệp tin từ server Sau ta vào tìm hiểu lớp URLConnection, lớp đóng vai trị động cho lớp URL • Chương 6: Lập trình Socket cho giao thức TCP Trong chương tìm hiểu cách lập trình cho mơ hình client/server kiểu kiến trúc client/server Các lớp Socket ServerSocket trình bày chi tiết chương để lập chương trình cho giao thức TCP • Chương 7: Lập trình ứng dụng cho giao thức UDP Chương giới thiệu giao thức UDP đặc trưng giao thức Tiếp đến ta vào tìm hiểu lớp DatagramPacket DatagramSocket để viết chương trình ứng dụng mạng cho giao thức UDP • Chương 8: Tuần tự hóa đối tượng ứng dụng lập trình mạng Trình bày vấn đề hóa ứng dụng hóa lập trình mạng - 10 - • Phương thức Remote: Đối tượng Remote chứa số phương thức, phương thức gọi từ xa đối tượng JVM khác JVM JVM Local Object - Data - Method 9.4 Remote Object - Data- Remote Method Các lớp trung gian Stub Skeleton Trong kỹ thuật lập trình phân tán RMI, để đối tượng máy Java ảo khác truyền tin với thơng qua lớp trung gian: Stub Skeleton Vai trò lớp trung gian: Lớp trung gian tồn hai phía client (nơi gọi phương thức đối tượng xa) server (nơi đối tượng thật cài đặt để thực thi mã lệnh phương thức) Trong Java trình biên dịch rmic.exe sử dụng để tạo lớp trung gian Phía client lớp trung gian gọi Stub (lớp móc), phía server lớp trung gian gọi Skeleton(lớp nối) chúng giống lớp môi giới giúp lớp xa truyền tin với 9.5 Cơ chế hoạt động RMI Các hệ thống RMI phục vụ cho việc truyền tin thường chia thành hai loại: client server Một server cung cấp dịch vụ RMI, client gọi phương thức đối tượng dịch vụ Server RMI phải đăng ký với dịch vụ tra tìm đăng ký tên Dịch vụ cho phép client truy tìm chúng, chúng tham chiếu tới dịch vụ mơ hình khác Một chương trình đóng vai trị có tên rmiregistry, chương trình chạy tiến trình độc lập cho phép ứng dụng đăng ký dịch vụ RMI nhận tham chiếu tới dịch vụ đặt tên Mỗi server đựơc đăng ký, chờ yêu cầu RMI từ client Gắn với đăng ký dịch vụ tên biểu diễn xâu ký tự để - 189 - cho phép client lựa chọn dịch vụ thích hợp N ếu dịch vụ chuyển từ server sang server khác, client cần tra tìm trình đăng ký để tìm vị trí Điều làm cho hệ thống có khả dung thứ lỗi-nếu dịch vụ không khả dụng máy bị sập, người quản trị hệ thống tạo thể dịch vụ hệ thống khác đăng ký với trình đăng ký RMI Các client RMI gửi thông điệp RMI để gọi phương thức đối tượng từ xa Trước thực gọi phương thức từ xa, client phải nhận tham chiếu từ xa Tham chiếu thường có cách tra tìm dịch vụ trình đăng ký RMI Ứng dụng client yêu cầu tên dịch vụ cụ thể, nhận URL trỏ tới tài nguyên từ xa Khuôn dạng sử dụng để biểu diễn tham chiếu đối tượng từ xa: rmi://hostname:port/servicename Trong hostname tên máy chủ địa IP, port xác định dịch vụ, servicename xâu ký tự mơ tả dịch vụ Mỗi có tham chiếu, client tương tác với dịch vụ từ xa Các chi tiết liên quan đến mạng hoàn toàn che dấu người phát triển ứng dụng-làm việc với đối tượng từ xa đơn giản làm việc với đối tượng cục Điều có thơng qua phân chia hệ thống RMI thành hai thành phần, stub skeleton Đối tượng stub đối tượng ủy quyền, truyền tải yêu cầu đối tượng tới server RMI Cần nhớ dịch vụ RMI định nghĩa giao tiếp, khơng phải chương trình cài đặt, ứng dụng client giống chương trình hướng đối tượng khác Tuy nhiên ngồi việc thực cơng việc nó, stub cịn truyền thông điệp tới dịch vụ RMI xa, chờ đáp ứng, trả đáp ứng cho phương thức gọi N gười phát triển ứng dụng không cần quan tâm đến tài nguyên RMI nằm đâu, chạy nào, đáp ứng đầy đủ yêu cầu Client RMI đơn giản gọi phương thức đối tượng ủy quyền, đối tượng quản lý tất chi tiết cài đặt - 190 - Tại phía server, đối tượng skeleton có nhiệm vụ lắng nghe yêu cầu RMI đến truyền yêu cầu tới dịch vụ RMI Đối tượng skeleton không cung cấp cài đặt dịch vụ RMI N ó đóng vai trị chương trình nhận yêu cầu, truyền yêu cầu Sau người phát triển tạo giao tiếp RMI, phải cung cấp phiên cài đặt cụ thể giao tiếp Đối tượng cài đặt gọi đối tượng skeleton, đối tượng gọi phương thức tương ứng truyền kết cho đối tượng stub client RMI Mơ hình làm cho việc lập trình trở nên đơn giản, skeleton tách biệt với cài đặt thực tế dịch vụ Tất mà người phát triển dịch vụ cần quan tâm mã lệnh khởi tạo (để đăng ký dịch vụ chấp nhận dịch vụ), cung cấp chương trình cài đặt giao tiếp dịch vụ RMI Với câu hỏi thông điệp truyền nào, câu trả lời tương đối đơn giản Việc truyền tin diễn đối tượng stub skeleton cách sử dụng socket TCP Mỗi tạo ra, skeleton lắng nghe yêu cầu đến phát đối tượng stub Các tham số hệ thống RMI không hạn chế kiểu liệu nguyên tố-bất kỳ đối tượng có khả hóa truyền tham số trả từ phương thức từ xa Khi stub truyền yêu cầu tới đối tượng skeleton, phải đóng gói tham số (hoặc kiểu liệu nguyên tố, đối tượng hai) để truyền đi, trình gọi marshalling Tại phía skeleton tham số khơi phục lại để tạo nên kiểu liệu nguyên tố đối tượng, q trình cịn gọi unmarshaling Để thực nhiệm vụ này, lớp lớp ObjectOutputStream ObjectInputStream sử dụng để đọc ghi nội dung đối tượng JVM JVM Skeleton Object Stub Client - 191 - Remote Object Sơ đồ gọi phương thức đối tượng xa thông qua lớp trung gian cụ thể hoá sau: Computer C C1–Skel A2 A1 C1- stub Computer A B1_stub C1 B1—Skel B1 • Ta có đối tượng C1 cài đặt máy C Trình biên dịch rmic.exe tạo hai lớp trung gian C1_Skel C1_Stub Lớp C1_Stub đem máy A Khi A1 máy A gọi C1 chuyển lời gọi đến lớp C1_Stub, C1_Stub chịu trách nhiệm đóng gói tham số, chuyển vào khơng gian địa tương thích với đối tượng C1 sau gọi phương thức tương ứng • N ếu có phương thức đối tượng C1 trả lớp C1_Skel đóng gói trả ngược cho C1_Stub chuyển giao kết cuối lại cho A1 N ếu kết nối mạng gặp cố lớp trung gian Stub thơng báo lỗi đến đối tượng A1 Theo chế A1 ln nghĩ hoạt động trực tiếp với đối tượng C1 máy cục • Trên thực tế, C1_Stub máy A làm lớp trung gian chuyển đổi tham số thực giao thức mạng, khơng phải hình ảnh đối tượng C1 Để làm điều này, đói tượng C1 cần cung cấp giao diện tương ứng với phương thức cho phép đối tượng A1 gọi máy A - 192 - 9.6 Kiến trúc RMI Sự khác biệt đối tượng từ xa đối tượng cục đối tượng từ xa nằm máy ảo khác Thông thường, tham số đối tượng truyền cho phương thức giá trị đối tượng trả từ phương thức thông qua cách truyền theo tham chiếu Tuy nhiên cách không làm việc phương thức gọi phương thức gọi không nằm máy ảo Vì vậy, có ba chế khác sử dụng để truyền tham số cho phương thức từ xa nhận kết trả từ phương thức xa Các kiểu nguyên tố (int, boolean, double,…) truyền theo tham trị Các tham chiếu tới đối tượng từ xa truyền dạng tham chiếu cho phép tất phía nhận gọi phương thức đối tượng từ xa Các đối tượng không thực thi giao tiếp từ xa (nghĩa đối tượng không thực thi giao tiếp Remote) truyền theo tham trị; nghĩa đầy đủ truyền cách sử dụng chế hóa đối tuợng Các đối tượng khơng có khả hóa khơng thể truyền tới phương thức xa Các đối tượng xa chạy server gọi đối tượng chạy client Các đối tượng xa, đối tượng khả chạy hệ thống client Để trình truyền tin suốt với người lập trình, truyền tin client server cài đặt theo mơ hình phân tầng hình vẽ Chương trình Server Đường logic Chương trình Client Skeleton Stub Tầng tham chiếu từ xa Tầng tham chiếu từ xa Tầng giao vận N etwork Tầng giao vận Đối với người lập trình, client dường truyền tin trực tiếp với server Thực tế, chương trình client truyền tin với đối tượng stub đối tượng ủy quyền đối tượng thực nằm hệ thống từ xa Stub chuyển đàm thoại cho tầng tham chiếu, tầng truyền tin trực tiếp với tầng giao vận Tầng giao vận client truyền liệu mạng máy tính tới tầng giao vận bên phía server Tầng giao vận bên phía server truyền tin với tầng tham chiếu, tầng truyền tin phần phần mềm server gọi skeleton - 193 - Skeleton truyền tin với server Theo hướng khác từ server đến client luồng truyền tin theo chiều ngược lại Cách tiếp cận phức tạp ta không cần quan tâm đến vấn đề Tất che dấu đi, người lập trình quan tâm đến việc lập chương trình có khả gọi phương thức từ xa giống chương trình cục Trước gọi phương thức đối tượng xa, ta cần tham chiếu tới đối tượng Để nhận tham chiếu này, ta yêu cầu trình đăng ký tên rmiregistry cung cấp tên tham chiếu Trình đăng ký đóng vai trị DN S nhỏ cho đối tượng từ xa Một client kết nối với trình đăng ký cung cấp cho URL đối tượng từ xa Trình đăng ký cung cấp tham chiếu tới đối tượng client sử dụng tham chiếu để gọi phương thức server Trong thực tế, client gọi phương thức cục stub Stub đối tượng cục thực thi giao tiếp từ xa đối tượng từ xa Tầng tham chiếu từ xa thực thi giao thức tầng tham chiếu từ xa cụ thể Tầng độc lập với đối tượng stub skeleton cụ thể Tầng tham chiếu từ xa có nhiệm vụ hiểu tầng tham chiếu từ xa có ý nghĩa Đơi tầng tham chiếu từ xa tham chiếu tới nhiều máy ảo nhiều host Tầng giao vận gửi lời gọi Internet Phía server, tầng giao vận lắng nghe liên kết đến Trên sở nhận lời gọi phương thức, tầng giao vận chuyển lời gọi cho tầng tham chiếu server Tầng tham chiếu chuyển đổi tham chiếu gửi client thành tham chiếu cho máy ảo cục Sau chuyển yêu cầu cho skeleton Skeleton đọc tham số truyền liệu cho chương trình server, chương trình server thực lời gọi phương thức thực N ếu lời gọi phương thức trả giá trị, giá trị gửi xuống cho skeleton, tầng tham chiếu xa, tầng giao vận phía server, thơng qua Internet sau chuyển lên cho tầng giao vận, tầng tham chiếu xa, stub phía client 9.7 Cài đặt chương trình Để lập hệ thống client/server RMI ta sử dụng ba gói sau: java.rmi, java.rmi.server, java.rmi.registry Gói java.rmi bao gồm giao tiếp, lớp ngoại lệ sử dụng để lập trình cho phía client Gói java.rmi.server cung cấp giao tiếp, lớp ngoại lệ sử dụng để lập trình cho phía server Gói java.rmi.registry có giao tiếp, lớp ngoại lệ sử dụng để định vị đặt tên đối tượng - 194 - 9.7.1 Cài đặt chương trình phía Server Để minh họa cho kỹ thuật lập trình RMI tác giả xin giới thiệu cách lập chương trình FileServer đơn giản cho phép client tải tệp tin • Bước 1: Đặc tả giao tiếp Remote import java.rmi.*; public interface FileInterface extends Remote { public byte[] RemoteException; downloadFile(String fileName)throws } • Bước 2: Viết lớp thực thi giao tiếp import java.rmi.*; import java.rmi.server.*; import java.io.*; public class FileInterface FileImpl extends UnicastRemoteObject implements { private String name; public FileImpl(String s)throws RemoteException { super(); name=s; } public byte[] RemoteException downloadFile(String fileName)throws { try{ File file=new File(fileName); //Tạo mảng b để lưu nội dung tệp byte b[]=new byte[(int)file.length()]; BufferedInputStream FileInputStream(fileName)); bis=new bis.read(b,0,b.length); bis.close(); return b; - 195 - BufferedInputStream(new } catch(Exception e) { System.err.println(e); return null; } } } • Bước 3: Viết chương trình phía server import java.io.*; import java.rmi.*; import java.net.*; public class FileServer { public static void main(String[] args) throws Exception { FileInterface fi=new FileImpl("FileServer"); InetAddress dc=InetAddress.getLocalHost(); Naming.rebind("rmi://"+dc.getHostAddress()+"/FileServer",fi); System.out.println("Server ready for client requests "); } } • Bước 4: Cài đặt client import java.rmi.*; import java.io.*; public class FileClient { public static void main(String[] args) throws Exception { if(args.length!=2) { System.out.println("Su machineName "); dung:java - 196 - FileClient fileName System.exit(0); } String name="rmi://"+args[1]+"/FileServer"; FileInterface fi=(FileInterface)Naming.lookup(name); byte[] filedata=fi.downloadFile(args[0]); File file =new File(args[0]); BufferedOutputStream bos=new FileOutputStream(file.getName())); BufferedOutputStream(new bos.write(filedata,0,filedata.length); bos.flush(); bos.close(); } } 9.8 Triển khai ứng dụng Để triển khai ứng dụng RMI ta cần thực bước sau: • Bước 1: Biên dịch tệp chương trình C:\MyJava>javac FileInterface.java C:\MyJava>javac FileImpl.java C:\MyJava>javac FileServer.java C:\MyJava>javac FileClient.java Ta thu lớp sau: FileInterface.class, FileImpl.class, FileServer.class, FileClient.class Để tạo lớp trung gian ta dùng lệnh sau: C:\MyJava>rmic FileImpl Sau biên dịch ta thu hai lớp trung gian FileImpl_Stub.class FileImpl_Skel.class • Bước 2: Tổ chức chương trình Ta tổ chức chương trình hai máy client server sau: Phía Server Phía Client FileInterface.class FileInterface.class FileImpl.class FileImpl_Stub.class FileImpl_Skel.class FileClient.class - 197 - FileServer.class • Bước 3: Khởi động chương trình Ở ta giả lập chương trình máy Việc triển khai mạng khơng có khó khăn ngồi việc cung cấp hostname địa IP server cung cấp dịch vụ Khởi động trình đăng ký: C:\MyJava>start rmiregistry Khởi động server C:\MyJava>start java FileServer Khởi động client C:\MyJava>java FileClient D:\RapidGet.exe localhost 9.9 Các lớp giao tiếp gói java.rmi Khi viết applet hay ứng dụng sử dụng đối tượng xa, người lập trình cần nhận thức giao tiếp lớp cần dùng cho phía client nằm gói java.rmi 9.9.1 Giao tiếp Remote Giao tiếp không khai báo phương thức Các phương thức khai báo phương thức giao tiếp gọi từ xa 9.9.2 Lớp Naming Lớp java.rmi.N aming truyền tin trực tiếp với trình đăng ký chạy server để ánh xạ URL rmi://hostname/myObject thành đối tượng từ xa cụ thể host xác định Ta xem trình đăng ký DN S cho đối tượng xa Mỗi điểm vào trình đăng ký bao gồm tên tham chiếu đối tượng Các client cung cấp tên nhận tham chiếu tới URL URL rmi giống URL http ngoại trừ phần giao thức thay rmi Phần đường dẫn URL tên gắn với đối tượng từ xa server tên tệp tin Lớp N aming cung cấp phương thức sau: • Public static String[] list(String url) throws RemotException Phương thức trả mảng xâu ký tự, xâu URL gắn với tham chiếu Tham số url URL trình đăng ký N aming - 198 - • Public static Remote lookup(String url)throws RemotException, N otBoundException, AccessException, MalformedURLException Client sử dụng phương thức để tìm kiếm đối tượng từ xa gắn liền với tên đối tượng Phương thức đưa ngoại lệ N otBoundException server xa không nhận tên N ó đưa ngoại lệ RemoteException trình khơng thể liên lạc với trình đăng ký N ó đưa ngoại lệ AccessException server từ chối tra tìm tên cho host cụ thể Cuối URL khơng cú pháp đưa ngoại lệ MalformedURLException • Public static void bind(String url, Remote object)throws RemotException, AlreadyBoundException, MalformedURLException, AccessException Server sử dụng phương thức bind() để liên kết tên với đối tượng xa N ếu việc gán thành công client tìm kiếm đối tượng stub từ trình đăng ký Có nhiều tình xảy trình gán tên Phương thức đưa ngoại lệ MalformedURLException url không cú pháp N ó đưa ngoại lệ RemoteException khơng thể liên lạc với trình đăng ký N ó đưa ngoại lệ AccessException client không phép gán đối tượng trình đăng ký N ếu đối tượng URL gắn với đối tượng cục đưa ngoại lệ AlreadyBoundException • Public static void rebind(String url, Remote obj)throws RemoteException, AccessException, MalformedURLException Phương thức giống phương thức bind() ngoại trừ việc gán URL cho đối tượng URL gán 9.10 Các lớp giao tiếp gói java.rmi.registry Làm để nhận tham chiếu tới đối tượng? Client tìm đối tượng xa có cách thực truy vấn với trình đăng ký server Trình đăng ký cho ta biết đối tượng khả dụng cách truy vấn trình đăng ký server Ta biết lớp java.rmi.N aming cho phép chương trình giao tiếp với trình đăng ký Giao tiếp Registry lớp LocateRegistry cho phép client tìm kiếm đối tượng xa server theo tên RegistryImpl lớp lớp RemoteObject, lớp liên kết - 199 - tên với đối tượng RemoteObject Client sử dụng lớp LocateRegistry để tìm kiếm RegistryImpl cho host cổng cụ thể 9.10.1 Giao tiếp Registry Giao tiếp cung cấp năm phương thức: • Bind() để gán tên với đối tượng từ xa cụ thể • List() liệt kê tất tên đăng ký với trình đăng ký • Lookup() tìm đối tượng từ xa cụ thể với URL cho trước gắn với • Rebind() gán tên với đối tượng xa khác • Unbind() loại bỏ tên gán cho đối tượng xa trình đăng ký Registry.REGISTRY_PORT cổng mặc định để lắng nghe các yêu cầu Giá trị mặc định 1099 9.10.2 Lớp LocateRegistry Lớp java.rmi.registry.LocateRegistry cho phép client tìm trình đăng ký trước tiên • Public static Registry getRegistry() throws RemoteException • Public static Registry getRegistry(int port) throws RemoteException • Public static Registry getRegistry(String host) throws RemoteException • Public static Registry getRegistry(String host, int port) throws RemoteException • Public static Registry getRegistry(String host, int port, RMIClientSocketFactory factory) throws RemoteException Mỗi phương thức trả đối tượng Registry sử dụng để nhận đối tượng từ xa thơng qua tên Ví dụ để client có tìm thấy đối tượng ta có đăng ký đối tượng với trình đăng ký thơng qua lớp Registry: Registry r=LocateRegistry.getRegistry(); r.bind(“MyName”,this); Client muốn gọi phương thức đối tượng từ xa dùng lệnh sau: Registry r=LocateRegistry.getRegistry(www.somehose.com); RemoteObjectInterface obj=(RemoteObjectInterface)r.lookup(“MyName”); - 200 - Obj.invokeRemoteMethod(); Ví dụ minh họa cách tạo trình đăng ký server import java.io.*; import java.rmi.*; import java.net.*; import java.rmi.registry.*; public class FileServer { public static void main(String[] args) throws Exception { FileInterface fi=new FileImpl("FileServer"); InetAddress dc=InetAddress.getLocalHost(); LocateRegistry.createRegistry(1099); Naming.bind("rmi://"+dc.getHostAddress()+"/FileServer",fi); System.out.println("Server ready for client requests "); } } N hư thực thi chương trình ta khơng cần phải khởi động trình đăng ký việc tạo trình đăng ký khởi động tiến hành chương trình phía server 9.11 Các lớp giao tiếp gói java.rmi.server 9.11.1 Lớp RemoteObject Về mặt kỹ thuật đối tượng từ xa thể lớp RemoteObject Thực tế, phần lớn đối tượng từ xa thể lớp lớp RemoteObject 9.11.2 Lớp RemoteServer Lớp lớp lớp RemoteObject; lớp cha lớp UnicastRemoteObject Lớp có constructor này: • Protected RemoteServer() • Protected RemoteServer(RemoteRef r) N hận thơng tin client Lớp RemoteServer có phương thức để xác định thông tin client mà ta truyền tin với nó: - 201 - • public static String getClientHost() throws ServerN otActiveException Phương thức trả hostname client mà gọi phương thức từ xa 9.11.3 Lớp UnicastRemoteObject Lớp UnicastRemoteObject lớp cụ thể lớp RemoteServer Để tạo đối tượng xa, ta phải thừa kế lớp UnicastRemoteServer khai báo lớp thực thi giao tiếp Remote 9.12 Kết luận RMI công nghệ phân tán cho phép phương thức máy ảo Java gọi từ xa Đây cách đơn giản để truyền tin ứng dụng với ứng dụng khác so với truyền tin trực tiếp với TCP socket, cách truyền tin địi hỏi hai phía sử dụng giao thức Thay viết chương trình cài đặt giao thức, người phát triển tương tác với phương thức đối tượng định nghĩa giao tiếp dịch vụ RMI Mỗi có tham chiếu tới đối tượng từ xa, tham chiếu xem đối tượng cục bộ, cách trực quan để phát triển ứng dụng mạng - 202 - TÀI LIỆU THAM KHẢO Tiếng Việt [1] Elliotte Rusty Harold, Java N etwork Programming [2] N guyễn Phương Lan- Hoàng Đức Hải, Java lâp trình mạng, N hà xuất Giáo dục [3] Darrel Ince & Adam Freemat, Programming the Internet with Java, Addison-Wesley [4] Mary Campione&Kathy Walrath&Alison Huml, Java™ Tutorial, Third Edition: A Short Course on the Basics, Addison Wesley The Complete Java [5] N guyễn Thúc Hải, Mạng máy tính hệ thống mở, N hà xuất Giáo dục [6] Đồn Văn Ban, Lập trình hướng đối tượng với Java, N hà xuất Khoa học Kỹ thuật Tiếng Anh [7] Douglas E.Comer, David L.Stevens, Client-Server Programming And Applications In book: Internetworking with TCP/IPVolume III, Pearson Education, Singapore, 2004 [8] Herbert Schildt, JavaTM 2: The Complete Reference Fifth Edition, Tata McGrawHill Publishing Company Limited, India, 2002 [9] Elliote Rusty Harold, JavaTM N etwork Programming, Third Edition, Oreilly, 2005 [10] Qusay H Mahmoud, Advanced Socket Programming, http://java.sun.com, December 2001 [11] Shengxi Zhou, Transport Java objects over the network with datagram packets, http://www.javaworld.com, 2006 ... đề lập trình phân tán đối tượng kỹ thuật gọi phương thức RMI (Remote Method Invocation) - 11 - CHƯƠNG TỔNG QUAN VỀ LẬP TRÌNH MẠNG Chương trình bày vấn đề, khái niệm liên quan đến lập trình mạng. .. DatagramSocket để viết chương trình ứng dụng mạng cho giao thức UDP • Chương 8: Tuần tự hóa đối tượng ứng dụng lập trình mạng Trình bày vấn đề hóa ứng dụng hóa lập trình mạng - 10 - • Chương 9: Phân... thống mạng, mạng xương sống (Backbone) đóng vai trị quan trọng Mạng Backbone mạng tốc độ cao kết nối mạng có tốc độ thấp Một công ty sử dụng mạng Backbone để kết nối mạng LAN có tốc độ thấp Mạng