Dn1: Là một hệ có chức năng và dữ liệu phân tán trên các máy trạm được kết nối với nhau qua mạng máy tính Có CSDL phân tán Dn2: Là một tập các máy tính độc lập được kết nối với nhau bởi
Trang 1TR ƯỜ NG Đ I H C DUY TÂN Ạ Ọ
ĐỒ ÁN CÁ NHÂN MÔN HỌC:
CS420: HỆ PHÂN TÁN (J2EE, NET)
GIẢNG VIÊN HƯỚNG DẪN : NGUYỄN HỮU PHÚC
Trang 2Tran Van Men
PHẦN 1: LÝ THUYẾT Câu 1: Hệ phân tán là gì? Ví dụ về một số mô hình hoặc ứng dụng của hệ phân tán?
1 Hệ phân tán là gì?
Dn1: Là một hệ có chức năng và dữ liệu phân tán trên các máy trạm được kết nối
với nhau qua mạng máy tính (Có CSDL phân tán)
Dn2: Là một tập các máy tính độc lập được kết nối với nhau bởi mạng máy tính và
được cài đặt phần mềm phân tán
Dn3: Là một tập các máy tính độc lập giao tiếp với nhau như một hệ thống thống
nhất và toàn vẹn
2 Ví dụ về một số mô hình hoặc ứng dụng của hệ phân tán?
Mô hình client – server:
- Môi trường bao gồm các máy trạm và các máy chủ
- Dịch vụ: Là công việc, chức năng mà máy có thể thực hiện
- Server: Là máy mà thực hiện các nhiệm vụ
- Client: Là máy trạmđưa ra yêu cầu dịch vụ
Mô hình Peer to Peer
- Mỗi máy trong mạng có (chủ yếu) khả năng tương đương
- Không có máy được dành riêng chỉ để phục vụ
- Bộ sưu tập các máy tính gồm :
1
Trang 3Tran Van Men
Câu 2: Phân biệt giữa chuyển mạch kênh và chuyển mạch gói, ưu và nhược điểm của 2 loại này?
Chuyển mạch kênh:
- Sử dụng một kênh chuyên dụng hoặc mạch riêng được thành lập trong thời
gian truyền
- Dữ liệu được truyền đi ở thời gian thực (real time)
- Độ trễ (latency) hầu như không đổi
- Tín hiệu truyền dạng xung (Analog/Digital)
Trang 4Tran Van Men
truyền dữ liệu không liên tục như dữ liệu internet, vì chất lượng kênhđược giữ nguyên suốt cuộc gọi
Chuyển mạch gói:
- Sử dụng nhiều kênh truyền khác nhau -> thất lạc gói tin trên đường truyền.
Trường hợp gói tin mất quá nhiều -> máy nhận sẽ không thể nhận được thôngtin gởi (Checksum Err)
- Dữ liệu được truyền đi không ở thời gian thực
- Độ trễ (latency) lớn
- Tín hiệu truyền dạng số: 01010…1010100
- Ưu điểm:
hiệu quả hơn vì không cần cấp phát kênh cố định cho mỗi cuộc gọi
không liên tục như internet và email
- Nhược điểm:
khác nhau, nên trễ thời gian không đồng đều có thể xảy ra
sự cố trên đường truyền, mất mát dữ liệu có thể xảy ra
Câu 3: Nêu và cho ví dụ về các yếu tố ảnh hưởng đến sự ra đời của hệ phân tán?
Có 2 yếu tố chính:
- Sự phát triển, thay đổi của Công nghệ
- Nhu cầu của đối tượng sử dụng
Ví dụ:
- Thiết bị lưu trữ:
3
Trang 5Tran Van Men
0.003 Đô la mỹ cho mỗi MB của RAM
- Kiến trúc mạng:
bandwidth
Ngày nay: có thể truyền đến tốc độ 1000 Gbps (2020)
Câu 4: Middleware là gì, kể tên 3 Middleware phổ biến?
1 Middleware là gì
4
Trang 6Tran Van Men
- Middleware trong hệ thống phân tán là một loại phần mềm hệ thống phân tán
kết nối các loại ứng dụng khác nhau và cung cấp phân tán minh bạch cho cácứng dụng của nó kết nối
2 kể tên 3 Middleware phổ biến?
- Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương
trình yêu cầu dịch vụ (client) và một chương trình cung cấp dịch vụ (server)trên mạng
2 Socket hoạt động trên các giao thức nào,
- Hoạt động dựa trên giao thức TCP / IP, chúng thường được sử dụng như giao
tiếp (interface) cho các giao thức của nó,
3 Có các loại Socket nào phổ biến?
- Tùy thuộc vào các giao thức mà Socket phân thành ba loại: -
Câu 6: Giới thiệu về các giao thức TCP, UDP trong lập trình hệ phân tán?
TCP (Transmission Control Protocol) và UDP (User Datagram Protocol) làhai trong những giao thức chính được sử dụng trong lập trình hệ thống phân tán đểquản lý truyền thông giữa các máy tính và ứng dụng khác nhau trong mạng
TCP:
5
Trang 7Recommended for you
How Available is HC Assignment
Pre-Rev French Lit
2
CH 41
-naaghrehrhDDDDDDDDDDDDDDDDDDDD Medical-Surgical Nursing
1
Trang 8Tran Van Men
- Giao thức hướng kết nối (Connection-oriented protocols)
- 1 thiết lập kết nối (“bắt tay”)
- 2 [đàm phán giao thức]
- 3 trao đổi dữ liệu
- 4 chấm dứt kết nối
UDP:
- Giao thức hướng không kết nối (Connectionless protocols)
- 1 Không thiết lập kết nối
- 2 Gửi / nhận dữ liệu thực hiên qua gói
trên các đối tượng
thủ tục từ xa (RPC - Remote Procedure Call) thông qua các phươngpháp triệu gọi (invocation method) trên một đối tượng từ xa: Stub vàSkeleton
Câu 8: So sánh đồng hồ vật lý và đồng hồ logic?
- Độ chính xác: Đồng hồ vật lý thường có độ chính xác cao hơn so với đồng hồ
logic
6
Trang 9Tran Van Men
- Triển khai: Đồng hồ vật lý dựa vào thiết bị vật lý cụ thể, trong khi đồng hồ
logic là một khái niệm trừu tượng và thường được triển khai trong phần mềmhoặc hệ thống máy tính
- Ổn định: Đồng hồ vật lý thường ổn định hơn và ít bị ảnh hưởng bởi thay đổi
môi trường
- Sử dụng: Đồng hồ vật lý thường được sử dụng trong các ứng dụng yêu cầu độ
chính xác cao như đo lường khoa học và viễn thông, trong khi đồng hồ logicthường được sử dụng trong các hệ thống máy tính và phần mềm để đồng bộhóa thời gian và sự kiện
Câu 9: Nêu trình tự các bước thiết kế một ứng dụng phân tán với JAVA?
8 Tài liệu và hướng dẫn
9 Kiểm tra và tối ưu hóa
Câu 10: Nêu quy trình các phương thức/hàm xử lý khi truyền dữ liệu qua kỹ thuật RMI?
1 Tạo 1 lớp giao diện.Ví dụ: HelloInterface.java
2 Tạo lớp hiện thực mô tả các phương thức của lớp giao diện
3 Xây dựng chương trình Server:
7
Trang 10Tran Van Men
- tạo đối tượng RemoteObject từ lớp Implement đăng ký đối tượng với máy
JVM:
- đăng ký đối tượng với rmiregistry:
4 Xây dựng chương trình Client:
- tạo một đối tượng Obj tham chiếu đến đối tượng từ xa thông qua:
5 Biên dịch tạolớp Stub,Skel:
- rmic <tên lớp implement>
6 Biên dịch chương trình Client,Server,
Trang 11Tran Van Men
PHẦN 2: THỰC HÀNH Câu 1: Client nhập lần lượt 2 số nguyên a và b từ bàn phím và gởi cho Server Yêu cầu Server tính tổng a+b Viết chương trình hiển thị kết quả này trên màn hình Client theo kỹ thuật TCP.
Trả lời: Chương trình gồm 2 file Client1.java và Server1.java
public class Client1 {
public static void main(){
String serverhost = "localhost" ;
int serverport = 12345 ;
try {
Socket client = new Socket(serverhost, serverport);
System out println ( "Ket noi voi server: " + serverhost);
BufferedReader inputfromserver = new BufferedReader( new
InputStreamReader ( client getInputStream ()));
PrintWriter outputtoserver = new PrintWriter(client getOutputStream(), true );
System out print ( "Nhap a: " );
int a Integer.parseInt (consoleinput readLine ());
System out print ( "Nhap b: " );
int b Integer.parseInt ( consoleinput readLine ());
Trang 12Tran Van Men
public class Server1 {
public static void main(){
int port = 12345 ;
try {
ServerSocket server = new ServerSocket(port);
System out println ( "Server dang nghe ow cong: " + port);
Socket client server = accept();
System out println ( "Client da ket noi: " + client.getInetAddress());
BufferedReader inputfromclient = new BufferedReader( new
InputStreamReader ( client getInputStream ()));
PrintWriter ouputtoclient = new PrintWriter (client getOutputStream (), true );
while ( true ){
String inputA = inputfromclient readLine ();
String inputB = inputfromclient readLine ();
if (inputA ==null|| inputB ==null ){
Trang 13Tran Van Men
Trang 14Tran Van Men
Câu 2: Client gửi 1 đoạn ký tự (bao gồm số và chữ) cho Server Yêu cầu Server gửi trả lại các thông tin theo kỹ thuật TCP các yêu cầu sau:
a Số lượng ký tự, số lượng chữ số, số lượng chữ cái
b Số lượng ký tự trùng lặp (cho từng chữ và số)
c Hiển thị dãy ký tự đảo ngược
Trả lời: Chương trình gồm 2 file Client2.java và Server2.java
public class Client2 {
public static void main(){
String serverhost = "localhost" ;
int serverport = 12345 ;
try {
Socket client = new Socket(serverhost, serverport);
System out println ( "Ket noi voi server: " + serverport);
BufferedReader inputfromserver = new BufferedReader( new
InputStreamReader ( client getInputStream ()));
PrintWriter outputtoserver = new PrintWriter(client getOutputStream(), true );
System out print ( "Nhap chuoi chua chu voi so muon gui: " );
String text = consoleinput readLine ();
Trang 15Tran Van Men
public class Server2 {
public static void main(){
int port = 12345 ;
try {
ServerSocket server = new ServerSocket(port);
System out println ( "Server dang nghe ow cong: " + port);
Socket client server = accept();
System out println ( "Client da ket noi: " + client.getInetAddress());
BufferedReader inputfromclient = new BufferedReader( new
InputStreamReader ( client getInputStream ()));
PrintWriter ouputtoclient = new PrintWriter (client getOutputStream (), true );
//câu a: sốố l ng ký t , sốố l ượ ự ượ ng ch sốố, sốố l ữ ượ ng ch cái ữ
int charCount = input.length();
int digitCount = ;
int letterCount = ;
for ( char i input.toCharArray()){
if (Character isDigit (i))
{
digitCount ++ ;
}
13
Trang 16Tran Van Men
else if (Character.isLetter(i)){
letterCount ++ ;
}
}
//câu b: sốố l ượ ng ký t trùng l p ự ặ String duplicatedChars = "" ; for ( int i = ; i < input.length();i ){ ++ char currentChar = input.charAt(i); if (input.indexOf(currentChar) != input lastIndexOf (currentChar)){ if ( duplicatedChars.contains (String valueOf (currentChar))){ duplicatedChars += currentChar; }
}
}
//câu c: Hi n th dãy ký t đ o ng ể ị ự ả ượ c StringBuilder reverseinput = new StringBuilder (input) reverse (); String result = "a So luong ky tu: " + charCount + " " \t + " So luong chu so: " + digitCount + " " \t + " So luong chu cai: " + letterCount + " \t " + "b So luong ky tu trung lap: " + duplicatedChars.length() + " (" + duplicatedChars +
") " + " " \t + "c Day ky tu dao nguoc: " + reverseinput toString (); ouputtoclient.println(result); }
}
server.close(); client close (); } catch ( IOException e){ e.printStackTrace(); }
}
}
14
Trang 17Tran Van Men
Kết quả:
15
Trang 18Tran Van Men
Câu 3: Client nhập cho a,b,c và gửi cho Server theo kỹ thuật TCP Server xử lý và trả lại các nghiệm có thể có của phương trình bậc 2.
Trả lời: Chương trình gồm 2 file Client3.java và Server3.java
public class Client3 {
public static void main(){
String serverhost = "localhost" ;
int serverport = 12345 ;
try {
Socket socket = new Socket(serverhost, serverport);
System out println ( "Ket noi voi server: " + serverhost);
System out print ( "Nhap a: " );
double a Double parseDouble(consoleinput readLine());
System out print ( "Nhap b: " );
double b Double parseDouble ( consoleinput readLine ());
System out print ( "Nhap c: " );
double c = Double parseDouble ( consoleinput readLine ());
Trang 19Tran Van Men
// System.out.print("Server gui den: ");
System out println ( "Server gui den: " + serverMessage);
public class Server3 {
public static void main(){
int port = 12345 ;
try {
ServerSocket server = new ServerSocket(port);
System out println ( "Server dang nghe o cong: " + port);
//châốp nh n kếốt nốối t client ậ ừ
Socket client server = accept();
System out println ( "Client da ket noi: " + client.getInetAddress());
//luốồng nh p xuâốt d li u t client ậ ữ ệ ừ
BufferedReader inputfromclient = new BufferedReader( new
InputStreamReader ( client getInputStream ()));
PrintWriter outputtoclient = new PrintWriter (client getOutputStream (), true );
Trang 20Tran Van Men
try {
double a Double.parseDouble(parts[ ]); 0
double b Double parseDouble (parts[ ]); 1
double c = Double parseDouble (parts[ ]); 2
// gi i pt bac 2 ả double delta = b b * - 4 * c; double x1, ; x2
if (delta > ){ x1 = ( b Math.sqrt(delta)) ( / * a); x2 = ( b - - Math sqrt (delta)) / ( 2 a); outputtoclient.print( "phuong trinh co 2 nghiem phan biet: " ); outputtoclient.println( "nghiem 1: " + x1 + "; nghiem 2: " + x2); } else if (delta == 0 ){ x1 =- b ( 2 a); outputtoclient.println( "phuong trinh co nghiem kep: " + x1); } else { outputtoclient.println( "phuong trinh vo nghiem: " ); }
} catch ( NumberFormatException e){ outputtoclient.print( "du lieu khong hop le" ); }
} else { outputtoclient.print( "du lieu khong hop le" ); }
} else { break ; }
}
server.close(); client close ();
} catch ( IOException e){ e.printStackTrace(); }
}
}
18
Trang 21Tran Van Men
Kết quả:
19
Trang 22Tran Van Men
Câu 4: Client nhập 1 số Server hiển thị số đó có phải là số Fibonacci không? (dùng TCP)
Trả lời: Chương trình gồm 2 file Client4.java và Server4.java.
public class Client4 {
public static void main() {
try {
Socket socket = new Socket( "localhost" , 12345 );
BufferedReader input = new BufferedReader( new
InputStreamReader(socket.getInputStream()));
PrintWriter output = new PrintWriter(socket getOutputStream(), true );
// Nh p sốố t ng ậ ừ ườ i dùng
BufferedReader reader = new BufferedReader ( new InputStreamReader (System in ));
System out print ( "Nhao so: " );
String numberStr = reader.readLine();
output println (numberStr);
// Đ c kếốt qu t máy ch và hi n th ọ ả ừ ủ ể ị
String result = input.readLine();
System out println ( "Ket qua tu may chu: " + result);
Trang 23Tran Van Men
public class Server4 {
public static void main() {
try {
ServerSocket serverSocket = new ServerSocket( 12345 );
System out println ( "May chu dang nghe " );
while ( true ) {
Socket clientSocket serverSocket = accept ();
System out println ( "Da ket noi voi mot client." );
BufferedReader input = new BufferedReader( new
InputStreamReader(clientSocket getInputStream ()));
PrintWriter output = new PrintWriter(clientSocket.getOutputStream(), true );
// Đ c sốố t client ọ ừ
String numberStr = input.readLine();
int number = Integer.parseInt(numberStr);
// Ki m tra xem sốố có ph i là sốố Fibonacci hay khống ể ả
boolean isFibonacci = isFibonacci(number);