Bài thực hành Java
- Làm quen với môi trường IDE (Jubuider 9.0).
- Cài đặt các chương trình ứng dụng đơn giản về ngôn ngữ java.
+ Các bài tập về cấu trúc điều khiển.
+ Các bài tập về ngoại lệ.
+ Các bài tập về lớp.
+ Các bài tập về I/O.
(true) { String s = br.readLine(); String s1 = s.toUpperCase(); if(s.equals("quit"))break; else { pw.println(s1); pw.flush(); } } // Đóng kết nối br.close(); pw.close(); sk.close(); * Trình tự hoạt động của Client. import java.io.*; import java.net.*; public class TCPClient { public static void main(String[] args) { try { // biến sk thuộc kiểu dữ liệu kiểu Socket để tạo kết nối đến máy chủ tại cổng 9999 Socket sk = new Socket("127.0.0.1",9999); // biến br thuộc kiểu dữ liệu BufferedReader để đọc dữ liệu trên socket BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream())); BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in)); // biến pw thuộc kiểu dữ liệu PrintWriter để ghi dữ liệu lên socket PrintWriter pw = new PrintWriter(sk.getOutputStream()); // Lặp lại quá trình nhập chuỗi để gởi cho Server nếu chuỗi nhập vào là “quit” sẽ thoát khỏi quá trình nhập ngược lại sẽ in kết quả ra màn hình while(true) { System.out.println("ban hay nhap mot chuoi vao"); String s = br1.readLine(); pw.println(s); pw.flush(); if(s.equals("quit"))break; else System.out.println("chuoi nhan ve tu Server la" + br.readLine()); } // Client đóng kết nối br.close(); pw.close(); sk.close(); }catch(IOException ex) {} } } III.1.2. Lập trình với UDP. Bài Tập 1 : Viết chương trình kết nối Client – Server. Sau đó gửi các 1 thông điệp từ máy khách đến máy chủ. Máy chủ hiển thị ra [ IP Address – Port – Thông điệp ] từ máy khách gửi đến? * Trình tự hoạt động của UDPServer. import java.io.*; import java.net.*; class UDPServer { public static void main(String[] args) throws Exception { byte []buffer = new byte[1024]; int port = 2812; try { // Tạo ra một socket của UDP đang lắng nghe kết nối ở cổng port. DatagramSocket socket = new DatagramSocket(port); // Biến packet thuộc kiểu dữ liệu DatagramPacket để đóng gói dữ liệu được chứa trong buffer có độ dài buffer.length. DatagramPacket packet = new DatagramPacket(buffer,buffer.length); // Nhận gói dữ liệu về socket.receive(packet); // Lấy địa chỉ IP của Client. InetAddress ipClient = packet.getAddress(); // Lấy số hiệu cổng của Client int portClient = packet.getPort(); // Chuyển dữ liệu nhận về thành kiểu chuỗi String st = new String(packet.getData(),0,packet.getLength()); // Hiện thị chuỗi nhận về từ client và địa chỉ ip của client. System.out.println("receive : '" + st + "' from " + ipClient); packet.setLength(buffer.length); } catch (UnknownHostException evt) {evt.printStackTrace();} } } * Trình tự hoạt động của UDPClient. import java.io.*; import java.net.*; class UDPClient { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // Tạo ra một s UDPSocket để kết nối đến Server DatagramSocket socket = new DatagramSocket(); //Lấy địa chỉ ip của máy chủ(“localhost”) InetAddress ipServer = InetAddress.getByName("localhost"); int port = 2812; byte []sendData; System.out.print("\nNhap chuoi bat ky : "); String st=in.readLine(); sendData = st.getBytes(); // sendPacket để đóng gói dữ liệu với các tham số truyền vào mảng byte (sendData), số lượng byte(sendData.length), địa chỉ ip của Server, Số cổng của Server cần kết nối đến(port). DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,ipServer,port); // Gửi dữ liệu đến Server socket.send(sendPacket); // Đóng kết nối socket.close(); } } III.2. Bài tập: Câu 1: a) Chương trình phía máy chủ: - Lắng nghe và chấp nhận kết nối trên cổng 1234 - Khi nhận được một dòng do máy khách gửi đến máy chủ sẽ xử lý như sau: + Nếu dòng nhận được “OP DS1 DS2” (Trong đó “OP” là một phép toán số học có thể là: “+”, “-”, “*”, “/”. DS1, DS2 là đối số của phép toán. Các thành phần cách nhau bởi một dấu cách) Server sẽ thực hiện phép toán DS1 OP DS2 rồi gửi kết quả trả về Client. + Nếu dòng nhận được là “quit” (không phân biệt là chữ hoa hay chữ thường) máy chủ sẽ đóng kết nối. + Nếu dòng thông điệp nhận được không phải là các trường hợp trên thì máy chủ sẽ gửi về một dòng thông báo “Unkown command” b) ch phía máy khách: - Kết nối ðến máy chủ tại cổng 1234. - Ðọc một dòng từ bàn phím và gửi ðến cho Server. - Nếu dòng đọc được là “quit” (không phân biệt là chữ hoa hay chữ thường) Client sẽ đóng kết nối. - Đọc kết quả trả về và in ra màn hình Câu 2: a) Chương trình phía máy chủ - Lắng nghe và chấp nhận các kết nối đến trên cổng 9999 - Tạo ra mỗi tuyến cho một kết nối riêng biệt để đáp ứng các yêu cầu của các máy khách đồng thời - Khi nhận được một dòng do máy khách gửi đến máy chủ sẽ xử lý như sau: + Nếu dòng nhận được là “GetTime” (không phân biệt chữ hoa chữ thường) máy chủ sẽ lấy về giờ hiện tại của máy và gửi về máy khách + Nếu dòng nhận được là “GetDate” (không phân biệt chữ hoa chữ thường) máy chủ sẽ lấy về ngày hiện tại của máy và gửi về máy khách + Nếu dòng nhận được là “quit” (không phân biệt chữ hoa chữ thường) máy chủ sẽ đóng kết nối với máy khách+ Nếu dòng thông điệp nhận được không phải là các trường hợp trên thì máy chủ sẽ gửi về một dòng thông báo “Unkown command” b) Chương trình phía máy khách Kết nối đến chương trình máy chủ đã nêu trong câu a Đọc một dòng từ bàn phím và gửi dòng đọc được đến máy chủ Nếu dòng đọc được là “quit” (không phân biệt chữ hoa chữ thường) thì ngắt kết nối với máy chủ và kết thúc chương trình Đọc kết quả trả về và in ra màn hình Câu 3. Viết chương trình với yêu cầu sau: a) Chương trình phía máy chủ Lắng nghe và chấp nhận các kết nối đến trên cổng 9999 Tạo ra mỗi tuyến cho một kết nối riêng biệt để đáp ứng các yêu cầu của các máy khách đồng thời Khi nhận được một dòng do máy khách gửi đến máy chủ sẽ xử lý như sau:+ Nếu dòng nhận được là “GetLength” (không phân biệt chữ hoa chữ thường) máy chủ sẽ đọc tiếp một dòng và đến xen dòng thông điệp đó gồm có bao nhiêu từ và trả về cho máy khách+ Nếu dòng nhận được là “quit” (không phân biệt chữ hoa chữ thường) máy chủ sẽ đóng kết nối với máy khách+ Nếu dòng thông điệp nhận được không phải là các trường hợp trên thì máy chủ sẽ gửi về một dòng thông báo “Unkown command” b) Chương trình phía máy khách Kết nối đến chương trình máy chủ đã nêu trong câu a Đọc hai dòng lệnh từ bàn phím và gửi dòng đọc được đến máy chủ Nếu dòng đọc được là “quit” (không phân biệt chữ hoa chữ thường) thì ngắt kết nối với máy chủ và kết thúc chương trình Đọc kết quả trả về và in ra màn hình Câu 4: Viết chương trình theo mô hình Client-Server sử dụng Socket ở chế độ không nối kết: a) Chương trình phía máy chủ: - Lắng nghe kết nối trên cổng 1111 - Nhận một chuỗi rồi chuyển kiểu thành (double) tính căn bậc 2 rồi gửi trả về cho client. - Đóng kết nối. b) Chường trình phía máy khách: - Kết nối đến cổng 1111. - Đọc một chuỗi từ bàn phím, gửi chuỗi đến Server và nhận kết quả trả về hiện trên màn hình. - Đóng kết nối. Câu 5: Viết chương trình chat per to per, cho phép 2 máy tính gửi trực tiếp các thông điệp cho nhau IV. PRC và RMI. IV.1. Bài tập mẫu: Bài 1: Xây dựng một ứng dụng tính tổng của 1 mảng được gọi từ xa. * Xây dựng phương thức được gọi từ xa của các đối tượng. // Khai báo thư viện của rmi import java.rmi.*; \\ Xây dựng lớp Tong được kế thừa từ lớp Remote public interface Tong extends Remote { // Định nghĩa một remote Interface có tên là tong(int[]) public int tong(int[]a) throws RemoteException; } * Tạo lớp cài đặt cho giao diện khai báo () import java.rmi.*; public class Tongipl implements Tong { // Xây dựng hàm để tính tổng của một mảng. public int tong(int[]a) throws RemoteException { System.out.println("may khach yeu cau"); int tong =0; for(int i=0; i<a.length;i++ ) { tong+=a[i]; } return tong; } } * Xây dựng chương trình phía Server // Khai báo thư viện cho Server import java.rmi.server.*; import java.rmi.*; public class Server { public static void main (String[] args) { try { // Tạo đối tượng Tongipl thực sự. Tongipl t=newTongipl (); // Thông báo sự hiện diện của đối tượng cho máy áo java UnicastRemoteObject.exportObject(t); // Đăng ký đối tượng với bộ quán lý của rmi Naming.bind("rmi://localhost/MyT",t); System.out.println("Register Thanh cong!"); } catch(Exception e) {} } } * Xây dựng chương trình phía Client. import java.io.*; public class Client { public static void main(String[] args) { try { System.out.println(" tim doi tuong truy xuat theo ten"); Tong = (Tong)Naming.lookup("rmi://localhost/MyT"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Ban hay nhap so phan tu cua mang vao"); int n = Integer.parseInt(br.readLine()); int[]a= new int[n]; for(int i=0; i<a.length;i++) { System.out.println("Nhap phan tu a[ "+i+ "] " ); a[i]=Integer.parseInt(br.readLine()); } // Gọi phương thức của đối tượng System.out.println("TONG "+ c.tong(a)); } catch(IOException ex) {} catch(Exception e) { System.out.print(e); } } } * Biên dịch các file java nguồn.(Ví dụ Tất cả các file đều nằm trong thư mục (E:\\RMI))). + E:\RMI> javac Tong.java. + E:\RMI> javac Tongipl.java. + E:\RMI> javac Server.java. + E:\RMI> javac Client.java. * Sinh lớp trung gian STUB và SKETLETON + E:\RMI> rmi Tongipl * Chạy chương trình rmiregistry.exe + E:\RMI> rmiregistry.exe. * Khởi động đối tượng Server (mở một cửa sổ mới của msdos chạy chương trình của Server). + E:\RMI> java Server Kết quả Register Thanh cong * Khởi động đối tượng Client (mở một cửa sổ mới của msdos chạy chương trình của Client). + E:\RMI>java Client. Kết quả IV. 2. Bài tập: Câu 1: Xây dựng một ứng dụng đảo chuỗi được gọi từ xa. Câu 2: Xây dựng một ứng dụng trả ra GetTime(), GetDate của máy chủ trả về cho máy gọi từ xa. Câu 3: Xây dựng một ứng dụng chát Client_Server sử dụng kỹ thuật lập trình phân tán.
File đính kèm:
- Bài thực hành Java.doc