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.

 

doc26 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 8809 | Lượt tải: 1download
Tóm tắt nội dung Bài thực hành Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
(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:

  • docBài thực hành Java.doc