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 10 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

Tiêu đề Đồ án cá nhân môn học CS420: Hệ phân tán (J2EE, .NET)
Tác giả Huỳnh Quang Trung
Người hướng dẫn Nguyễn Hữu Phúc
Trường học Trường Đại học Duy Tân
Chuyên ngành Công nghệ thông tin
Thể loại Đồ án cá nhâ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ÂN TRƯỜ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ụctiê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); } catch (IOException e) {

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

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

// 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 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, receiveData.length);

// 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, receiveData.length);

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) (dùng RMI)

- Class TamGiacService:

package Cau_6;

import java.rmi.Remote;

import java.rmi.RemoteException;

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);

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();

// Đăng ký dịch vụ với tên "TriangleService"

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