1. Trang chủ
  2. » Luận Văn - Báo Cáo

đồ án cá nhân môn học cs420 hệ phân tán j2ee net

30 4 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 1,81 MB

Nội dung

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.- Class Server: package Cau_1; import java.io.*; import java.net.*; public class Server { public static void

Trang 1

TRƯỜNG ĐẠI HỌC DUY TÂNTRƯỜNG KHOA HỌC MÁY TÍNH

KHOA CÔNG NGHỆ THÔNG TIN

ĐỒ Á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 2

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?

Hệ phân tán là một hệ thống tính toán với các thành phần tính toán được phân bố trên các vị trí địa lý khác nhau Đây là tập hợp các máy tính độc lập, không phụ thuộc lẫn nhau, kết nối với nhau bằng một hạ tầng truyền thông Ví dụ về mô hình hệ phân tán có thể là mô hình client-server, mô hình peer-to-peer (P2P), hoặc mô hình hybrid.

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 cách tiếp cận hướng kết nối trong đó liên kết mạng được dành riêng cho một kết nối tại một thời điểm và không người dùng nào khác được phép sử dụng mạch đó Ngược lại, chuyển mạch gói phân chia dữ liệu được truyền thành các đơn vị nhỏ gọi là các gói không có sự bảo lưu từ đầu đến cuối của các liên kết mạng.

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?

Một số yếu tố ảnh hưởng đến sự ra đời của hệ phân tán bao gồm nhu cầu tăng không ngừng việc chia sẻ tài nguyên và thông tin, việc giá các trạm làm việc giảm nhanh chóng, và việc sử dụng rộng rãi các mạng.

Câu 4: Middleware là gì, kể tên 3 Middleware phổ biến?

Middleware là một loại phần mềm trung gian trên máy tính, nó được dùng để có thể kết nối với những phần mềm khác được dễ dàng, tiện lợi hơn Ba ví dụ về middleware phổ biến có thể là Oracle Fusion Middleware, IBM WebSphere và Microsoft NET.

Câu 5: Socket là gì, Socket hoạt động trên các giao thức nào, có các loại Socket nào phổ biến?

Socket được coi là một cổng giao tiếp giữa các ứng dụng trên mạng Nó cho phép các thiết bị trao đổi thông tin với nhau thông qua một kết nối định sẵn Socket hoạt động trên các giao thức như TCP (Transmission Control Protocol) và UDP (User Datagram Protocol) Có hai loại socket phổ biến là stream sockets (sử dụng TCP) và datagram sockets (sử dụng UDP).

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 giao thức quan trọng trong lập trình hệ phân tán TCP là giao thức kết nối hướng kết nối và cung cấp truyền thông hai chiều tin cậy giữa hai máy tính UDP là giao thức không kết nối và không đảm bảo việc giao hàng; nó chỉ gửi datagram từ nguồn đến điểm đích.

Câu 7: Mô tả Stub – Skeleton trong lập trình thủ tục triệu gọi từ xa trong hệ phân tán?

Trang 3

Stub và Skeleton là hai thành phần quan trọng trong lập trình thủ tục triệu gọi từ xa (Remote Procedure Call - RPC) trong hệ phân tán Stub là phần của RPC nằm ở máy khách (client), nó chịu trách nhiệm gửi yêu cầu từ máy khách tới máy chủ Skeleton nằm ở máy chủ (server), nó nhận yêu cầu từ Stub và sau đó thực hiện yêu cầu đó.

Câu 8: So sánh đồng hồ vật lý và đồng hồ logic?

Đồng hồ vật lý là gần tương đương với đồng hồ thời gian thực toàn cục Việc đo khoảng thời gian là hữu ích và nhận được trực tiếp từ đồng hồ vật lý Đồng hồ logic không phản ánh thời gian thực tế, nhưng nó giúp xác định thứ tự các sự kiện trong hệ thống phân tá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?

Thiết kế một ứng dụng phân tán với Java bao gồm các bước như xác định yêu cầu và mục tiêu của ứng dụng, thiết kế kiến trúc và mô hình dữ liệu, chọn công nghệ và framework phù hợp (ví dụ: Java RMI, Java EE), lập trình và kiểm thử các thành phần của ứng dụng.

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?

Quy trình các phương thức/hàm xử lý khi truyền dữ liệu qua kỹ thuật RMI (Remote Method Invocation) bao gồm việc khởi tạo kết nối giữa client và server, gọi phương thức từ xa thông qua stub, truyền dữ liệu qua mạng, và nhận kết quả trả về từ server.

Trang 4

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.

- Class Server: package Cau_1; import java.io.*; import java.net.*; public class Server {

public static void main(String[] args) { int port = 12345; // Cổng kết nối

try (ServerSocket serverSocket = new ServerSocket(port)) { System.out.println("Server đang lắng nghe trên cổng " + port); while (true) {

try (Socket clientSocket = serverSocket.accept()) { System.out.println("Đã kết nối với " + clientSocket.getRemoteSocketAddress()); // Tạo luồng vào và ra

BufferedReader in = new BufferedReader(new

Trang 5

public class Client {

public static void main(String[] args) {

String serverAddress = "127.0.0.1"; // Địa chỉ IP của máy chủ int serverPort = 12345; // Cổng kết nối

try (Socket socket = new Socket(serverAddress, serverPort)) { // Tạo luồng vào và ra

PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new

Trang 6

// Nhận và hiển thị kết quả từ Server String result = in.readLine();

System.out.println("Tổng của " + a + " và " + b + " là: " + result);

Trang 7

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

public class Server {

public static void main(String[] args) { int port = 12345; // Cổng kết nối

try (ServerSocket serverSocket = new ServerSocket(port)) { System.out.println("Server đang lắng nghe trên cổng " + port);

Trang 8

while (true) {

try (Socket clientSocket = serverSocket.accept()) { System.out.println("Đã kết nối với " + clientSocket.getRemoteSocketAddress()); // Tạo luồng vào và ra

BufferedReader in = new BufferedReader(new

// a Số lượng ký tự, số lượng chữ số, số lượng chữ cái int charCount = inputLine.length();

Trang 9

for (char c : inputLine.toCharArray()) { charCounts[c]++;

}

// c Hiển thị dãy ký tự đảo ngược

StringBuilder reverseString = new StringBuilder(inputLine).reverse(); // Gửi các thông tin về Client

out.println("Số lượng ký tự: " + charCount); out.println("Số lượng chữ số: " + digitCount); out.println("Số lượng chữ cái: " + letterCount);

Trang 10

public class Client {

public static void main(String[] args) {

String serverAddress = "127.0.0.1"; // Địa chỉ IP của máy chủ int serverPort = 12345; // Cổng kết nối

try (Socket socket = new Socket(serverAddress, serverPort)) { // Tạo luồng vào và ra

PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new String input = userInput.readLine(); // Gửi dữ liệu đến Server out.println(input);

// Nhận và hiển thị thông tin từ Server

Trang 12

- Hình ảnh Client

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.

- Class Server: import java.io.*; import java.net.*; public class Server {

public static void main(String[] args) { int port = 12345; // Cổng kết nối

try (ServerSocket serverSocket = new ServerSocket(port)) { System.out.println("Server đang lắng nghe trên cổng " + port);

while (true) {

Trang 13

try (Socket clientSocket = serverSocket.accept()) { System.out.println("Đã kết nối với " + clientSocket.getRemoteSocketAddress());

// Tạo luồng vào và ra

BufferedReader in = new BufferedReader(new

// Chuyển đổi chuỗi đầu vào thành các số a, b, c String[] parts = inputLine.split(",");

double x1 = (-b + Math.sqrt(delta)) / (2 * a); double x2 = (-b - Math.sqrt(delta)) / (2 * a);

out.println("Nghiệm x1 = " + x1 + ", Nghiệm x2 = " + x2); } else if (delta == 0) {

double x = -b / (2 * a);

out.println("Nghiệm kép x = " + x);

Trang 14

public class Client {

public static void main(String[] args) {

String serverAddress = "127.0.0.1"; // Địa chỉ IP của máy chủ int serverPort = 12345; // Cổng kết nối

try (Socket socket = new Socket(serverAddress, serverPort)) { // Tạo luồng vào và ra

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

Trang 15

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // Nhập a, b, c từ bàn phím

BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));

System.out.print("Nhập a, b, c (cách nhau bằng dấu phẩy): "); String input = userInput.readLine();

// Gửi dữ liệu đến Server out.println(input);

// Nhận và hiển thị nghiệm từ Server String result = in.readLine();

System.out.println("Kết quả: " + result);

Trang 17

import java.io.*; import java.net.*; public class Server {

public static void main(String[] args) { int port = 12345; // Cổng kết nối

try (ServerSocket serverSocket = new ServerSocket(port)) { System.out.println("Server đang lắng nghe trên cổng " + port); while (true) {

try (Socket clientSocket = serverSocket.accept()) { System.out.println("Đã kết nối với " + clientSocket.getRemoteSocketAddress());

// Tạo luồng vào và ra

BufferedReader in = new BufferedReader(new

int num = Integer.parseInt(inputLine); boolean isFibonacci = isFibonacci(num);

// Gửi kết quả về Client if (isFibonacci) {

Trang 18

// Kiểm tra xem một số có phải là số Fibonacci hay không private static boolean isFibonacci(int num) {

Trang 19

import java.io.*; import java.net.*; public class Client {

public static void main(String[] args) {

String serverAddress = "127.0.0.1"; // Địa chỉ IP của máy chủ int serverPort = 12345; // Cổng kết nối

try (Socket socket = new Socket(serverAddress, serverPort)) { // Tạo luồng vào và ra

PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new String input = userInput.readLine();

// Gửi dữ liệu đến Server out.println(input);

// Nhận và hiển thị kết quả từ Server String result = in.readLine();

System.out.println("Kết quả từ Server: " + result); } catch (IOException e) {

e.printStackTrace();

Trang 20

} } }

- Hình ảnh Server

Trang 21

- Hình ảnh Client

Câu 5: Client gởi cho Server 3 số a, b, c nhập từ bàn phím Yêu cầu Server cho biết chúng có tạo thành 3 cạnh của tam giác hay không, nếu có thì đó là tam giác gì? (dùng UDP)

- Class Server: import java.net.*; import java.io.*;

public class UDPServer {

public static void main(String[] args) { int port = 12345; // Cổng kết nối

try (DatagramSocket socket = new DatagramSocket(port)) { System.out.println("Server đang lắng nghe trên cổng " + port); while (true) {

Trang 22

try {

byte[] receiveData = new byte[1024];

DatagramPacket receivePacket = new DatagramPacket(receiveData,

// Gửi kết quả về Client

InetAddress clientAddress = receivePacket.getAddress(); int clientPort = receivePacket.getPort();

byte[] sendData = response.getBytes();

Trang 23

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);

// Kiểm tra xem ba số a, b và c có tạo thành tam giác hay không private static boolean isTriangle(double a, double b, double c) { return (a + b > c) && (a + c > b) && (b + c > a);

}

// Xác định loại tam giác (nhọn, tròn, tù)

private static String getTriangleType(double a, double b, double c) { double maxSide = Math.max(Math.max(a, b), c);

double sumOfSquares = a * a + b * b + c * c - maxSide * maxSide; if (sumOfSquares > maxSide * maxSide) {

return "Tam giác nhọn";

} else if (sumOfSquares < maxSide * maxSide) { return "Tam giác tù";

Trang 24

public class UDPClient {

public static void main(String[] args) {

String serverAddress = "127.0.0.1"; // Địa chỉ IP của máy chủ int serverPort = 12345; // Cổng kết nối

try (DatagramSocket socket = new DatagramSocket()) { // Nhập a, b, c từ bàn phím

BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));

System.out.print("Nhập a, b, c (cách nhau bằng dấu phẩy): "); String input = userInput.readLine();

// Gửi dữ liệu đến Server byte[] sendData = input.getBytes();

InetAddress serverAddressInet = InetAddress.getByName(serverAddress); DatagramPacket sendPacket = new DatagramPacket(sendData,

sendData.length, serverAddressInet, serverPort); socket.send(sendPacket);

Trang 25

// Nhận và hiển thị kết quả từ Server byte[] receiveData = new byte[1024];

DatagramPacket receivePacket = new DatagramPacket(receiveData,

Trang 26

- Hình ảnh Client

Câu 6: Client gửi cho cho Server độ dài của 3 cạnh Server phản hồi lại đây là tam giác gì (Vuông thường, Vuông cân, Cân, Đều, Thường hay không phải tam giác)

public interface TamGiacService extends Remote {

String classifyTriangle(double side1, double side2, double side3) throws RemoteException;

- Class TriangleServiceImpl:

Trang 27

if (!isValidTriangle(side1, side2, side3)) { return "Không phải tam giác"; }

if (isEquilateral(side1, side2, side3)) { return "Tam giác đều";

} else if (isIsosceles(side1, side2, side3)) { return "Tam giác cân";

} else if (isRightTriangle(side1, side2, side3)) { return "Tam giác vuông";

} else {

return "Tam giác thường"; }

}

Trang 28

private boolean isValidTriangle(double side1, double side2, double side3) { return (side1 + side2 > side3) && (side1 + side3 > side2) && (side2 + side3 > side1);

}

private boolean isEquilateral(double side1, double side2, double side3) { return (side1 == side2) && (side2 == side3);

}

private boolean isIsosceles(double side1, double side2, double side3) { return (side1 == side2) || (side1 == side3) || (side2 == side3); }

private boolean isRightTriangle(double side1, double side2, double side3) { double[] sides = { side1, side2, side3 };

public class Server {

public static void main(String[] args) {

Trang 29

try {

int port = 1099; // Cổng RMI LocateRegistry.createRegistry(port);

// Tạo đối tượng dịch vụ

TriangleService triangleService = new TriangleServiceImpl(); public class Client {

public static void main(String[] args) {

String serverAddress = "rmi://127.0.0.1/TriangleService"; try {

TriangleService triangleService = (TriangleService) Naming.lookup(serverAddress);

Trang 30

// Nhập độ dài của 3 cạnh từ bàn phím double side1 = 5.0;

double side2 = 4.0; double side3 = 3.0;

// Gọi phương thức từ Server và hiển thị kết quả

String result = triangleService.classifyTriangle(side1, side2, side3); System.out.println("Kết quả từ Server: " + result);

Ngày đăng: 25/04/2024, 16:18

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w