Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 41 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
41
Dung lượng
1,34 MB
Nội dung
ĐẠI HỌC ĐÀ NẴNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT-HÀN BÁO CÁO ĐỒ ÁN ĐỀ TÀI: XÂY DỰNG CHƯƠNG TRÌNH HỘI THOẠI SỬ DỤNG RMI Sinh viên thực : Huỳnh Văn Niên – 18IT2 Giảng viên hướng dẫn: TS Lý Quỳnh Trân Đà Nẵng, tháng 10 năm 2020 ĐẠI HỌC ĐÀ NẴNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT-HÀN BÁO CÁO ĐỒ ÁN ĐỀ TÀI: XÂY DỰNG CHƯƠNG TRÌNH HỘI THOẠI SỬ DỤNG RMI Đà Nẵng, tháng 11 năm 2020 Lời mở đầu Trong kỉ 21 này, đánh dấu đột phá kỉ nguyên mạng Internet, ngày xuất nhiều hệ thống mạng LAN, WAN, INTERNET… với phát triển giao thức mạng hỗ trợ việc truyền thơng, chia sẻ thơng tin máy tính với Giữa giới mà không gian mạng khơng ngừng ngày mở rộng, phát triển mơ hình hệ thống mạng ngày phải cải thiện để đáp ứng nhu cầu khắt khe từ phía người dùng, số có hệ thống phân tán, hệ thống cho thấy ưu điểm vượt trội khơng ngừng nâng cấp Qua việc tìm hiểu giao thức mạng, kĩ thuật lập trình hệ thống phân tán, em thấy tiềm phát triển kĩ thuật lập trình phân tán RMI nhằm giúp phân bổ tài nguyên thực lúc nhiều toán khác Với mong muốn rút ngắn thời gian khoảng cách trò chuyện, trao đổi thơng tin người dùng, chương trình tạo dựa theo mơ hình phân tán sử công nghệ RMI để thực dịch vụ trao đổi thông tin trực tuyến Bắt nguồn từ ý tưởng với gợi ý TS Lý Quỳnh Trân, em thực đồ án: “XÂY DỰNG CHƯƠNG TRÌNH HỘI THOẠI SỬ DỤNG RMI” Cấu trúc đồ án bao gồm: Chương 1: Cơ sở lý thuyết Chương 2: Phân tích thiết kế hệ thống Chương 3: Kết xây dựng chương trình Lời cảm ơn Để hoàn thành tốt đề tài tốt nghiệp này, ngồi nỗ lực thân, em cịn nhận quan tâm giúp đỡ nhiều tập thể cá nhân Trước hết, em xin gửi tới toàn thể thầy, cô giáo Đại học Công nghệ thông tin Truyền thông – Đại học Đà Nẵng lời cảm ơn chân thành Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc tới Giáo viên hướng dẫn –TS Lý Quỳnh Trân tận tâm hướng dẫn em suốt q trình thực tập hồn thiện đề tài Qua đây, em xin chân thành cảm ơn ban lãnh đạo thầy giáo hướng dẫn bạn bè tạo điều kiện thuận lợi có kiến thức thực tế cần thiết Cuối em kính chúc q thầy, dồi sức khỏe thành công nghiệp, đạt nhiều thành công tốt đẹp MỤC LỤC Giới thiệu Mục tiêu Đối tượng nghiên cứu Phạm vi nghiên cứu Dự đoán kết Chương Cơ sở lý thuyết 1.1 Tổng quan lập trình mạng 1.1.1 Lập trình mạng gì? .8 1.1.2 Phân loại mạng máy tính 1.1.3 Các loại kiến trúc mạng phổ thông 1.1.4 Mơ hình mạng 1.2 Giao thức mạng 13 1.2.1 Giao thức TCP (Transmission Control Protocol) 13 1.2.2 Giao thức UDP (User Datagram Protocol) 13 1.3 Lập trình phân tán đối tượng với RMI 14 1.3.1 Thế lập trình phân tán? .14 1.3.2 Kĩ thuật lập trình RMI 14 1.3.3 Ứng dụng hệ thống phân tán 17 1.4 Ngôn ngữ lập trình Java .17 1.4.1 Khái niệm 17 1.4.2 Thế mạnh ngôn ngữ Java 18 1.5 Cơng cụ lập trình - Eclipse IDE for Java Developers 19 1.5.1 Tổng quan Eclipse 19 1.5.2 Tính ưu việt eclipse 20 Chương Phân tích thiết kế hệ thống 20 2.1 Tổng quan toán 20 2.1.1 Giới thiệu toán 20 2.1.2 Đối tượng sử dụng 21 2.1.3 Mục tiêu chương trình .21 2.1.4 Các chức chương trình 21 2.2 Phân tích thiết kế hệ thống 21 2.2.1 Mô hình tốn 21 2.2.2 Cách thức hoạt động 22 2.2.3 Các biểu đồ Usecase 25 2.2.4 Biểu đồ Lớp 26 2.2.5 Các biểu đồ hoạt động 27 2.2.6 Biểu đồ 28 2.2.7 Thuật tốn quy trình thực 28 Chương Kết Quả Xây Dựng Chương Trình 32 3.1 Chương trình demo 32 3.2 Kết luận 35 3.2.1 Đánh giá công nghệ 35 3.2.2 Đánh giá ứng dụng 35 Tài liệu tham khảo .35 DANH MỤC CÁC BIỂU ĐỒ Biểu đồ UseCase người dùng 25 Biểu đồ lớp chương trình 26 Biểu đồ hoạt động đăng nhập 27 Biểu đồ hoạt động nhắn tin .27 Biểu đồ xử lý yêu cầu cho client .28 DANH MỤC HÌNH Mơ hình OSI TCP/IP .10 Mơ hình client-server p2p 11 Khái niệm RMI .15 Một số thuật ngữ RMI 15 Truyền tin RMI 16 Ngơn ngữ lập trình Java 18 Phần mềm lập trình eclipse 20 Mơ hình tốn RMI 22 Gửi yêu cầu nhận phản hồi 23 Tương tác stub skeleton 24 Callback client server .24 Khởi động Server .32 Thơng báo kích hoạt khơng thành công 32 Nhập nickname 32 Thông báo lỗi không đăng nhập 33 Giao diện ứng dụng Nguyễn Văn A 33 Giao diện ứng dụng Nguyễn Văn B 34 Chức gửi tin nhắn 34 Chức gửi file 35 Chức online 36 DANH MỤC CỤM TỪ VIẾT TẮT STT Cụm từ Viết tắt OOP Remote Method Invoke – tạm dịch triệu gọi phương thức từ xa Object-oriented programming (Lập trình hướng đối tượng) Java Virtual Machine – máy ảo java Graphic User (Giao diện người dùng) GUI Packet InterNet Groper PING RMI JVM trỏ tới tài nguyên từ xa Khuôn mẫu sử dụng để biểu diễn tham chiếu đối tượng từ xa: rmi://hostname:port/servicename Trong hostname tên máy chủ địa IP, port xác định cổng dịch vụ, servicename xâu ký tự mô tả tên dịch vụ Mỗi có tham chiếu, client tương tác với dịch vụ từ xa thông qua phân chia hệ thống RMI thành hai thành phần, stub skeleton Đối tượng stub đối tượng ủy quyền, truyền tải yêu cầu đối tượng từ client tới server RMI Nó truyền thơng điệp tới dịch vụ RMI xa, chờ phản hồi, trả phản hồi cho phương thức gọi Gửi yêu cầu nhận phản hồi Tại phía server, đối tượng skeleton có nhiệm vụ lắng nghe yêu cầu RMI đến truyền yêu cầu tới dịch vụ RMI Đối tượng gọi phương thức tương ứng truyền kết cho đối tượng stub client RMI Việc truyền tin diễn đối tượng stub skeleton cách sử dụng socket TCP Mỗi tạo ra, skeleton lắng nghe yêu cầu đến phát đối tượng stub Các tham số hệ thống RMI không hạn chế kiểu liệu nguyên tố-bất kỳ đối tượng có khả hóa truyền tham số trả từ phương thức từ xa Khi stub truyền yêu cầu tới đối tượng skeleton, phải đóng gói tham số (hoặc kiểu liệu nguyên tố, đối tượng hai) để truyền đi, trình gọi marshalling Tại phía skeleton tham số khơi phục lại để tạo nên 23 kiểu liệu nguyên tố đối tượng, q trình cịn gọi unmarshaling Để thực nhiệm vụ này, lớp lớp ObjectOutputStream ObjectInputStream sử dụng để đọc ghi nội dung đối tượng Tương tác stub skeleton Việc trao đổi thơng tin client thực nhờ chế callback RMI Trong RMI, Callback tính cho phép remote object máy khách tự đăng ký với máy chủ, đối tượng từ xa cho lệnh gọi lại để máy chủ đưa lời gọi phương thức từ xa cho máy khách kiện có thay đổi Một gọi lại RMI xảy máy khách gửi tham chiếu từ xa (proxy) tới dịch vụ (máy chủ) máy chủ gọi phương thức tham chiếu khách cần thiết Callback client server Khi máy chủ đối tượng thực gọi lại, vai trị hai q trình đảo ngược: máy chủ thành vai trò máy khách máy khách chuyển thành vai trò máy chủ 24 2.2.3 Các biểu đồ Usecase Biểu đồ xác định yêu cầu người dùng Biểu đồ UseCase người dùng 25 2.2.4 Biểu đồ Lớp Biểu đồ lớp chương trình 26 2.2.5 Các biểu đồ hoạt động Hoạt động client đăng nhập vào phòng Biểu đồ hoạt động đăng nhập Hoạt động gửi yêu cầu dịch vụ từ phía client Biểu đồ hoạt động nhắn tin 27 2.2.6 Biểu đồ Quá trình gửi yêu cầu dịch vụ từ client đến server xử lý gửi trả kết Biểu đồ xử lý yêu cầu cho client 2.2.7 Thuật tốn quy trình thực Tạo giao diện (interface) khai báo phương thức gọi từ xa đối tượng (tại server client) • Tại Server: Tạo lớp interface ServerInterface kế thừa lớp java.rmi.Remote, lớp chứa phương thức từ xa gọi client: public interface ServerInterface extends Remote{ 28 void addClient(ClientInterface client) throws RemoteException; public List getClient() throws RemoteException; void removeClient(ClientInterface client) throws RemoteException; } Tại Client: Tạo lớp interface ClientInterface kế thừa lớp java.rmi.Remote, lớp callback server nhằm truyền tin nhắn, file lấy tên người dùng: public interface ClientInterface extends Remote{ public void sendFile(String file, byte[] data)throws RemoteException; public void sendMessage(String username, String Message)throws RemoteException; public String getName()throws RemoteException; } Tạo lớp cài đặt (implements) cho lớp interface khai báo, viết chương trình thực thi phương thức server client Tại server: Tạo lớp Server kế thừa lớp java.rmi.server.UnicastRemoteObject implements lớp ServerInterface, lớp thực thi phương thức đa khai báo ServerInterface public class Server extends UnicastRemoteObject implements ServerInterface{ private final ArrayList clients = new ArrayList(); public Server() throws RemoteException{ } @Override public void addClient(ClientInterface client)throws RemoteException { this.clients.add(client); } @Override public List getClient() throws RemoteException { return clients; } @Override public void removeClient(ClientInterface client) throws RemoteException { // TODO Auto-generated method stub 29 //this.clients.remove(client); } } Tương tự lớp Client client public Client(String name,JTextArea message,JTextArea online) throws RemoteException{ this.message=message; this.online=online; this.name=name; } @Override public void sendMessage(String username,String Message)throws RemoteException{ // TODO Auto-generated method stub String messages=message.getText(); messages += username+":"+Message+"\n"; message.setText(messages); } @Override public void sendFile(String file, byte[] data)throws RemoteException { try{// TODO Auto-generated method stub File directorium =new File("D:/Data/" + file); // FileOutputStream copyOfFile=new FileOutputStream(directorium+"\\"+file); FileOutputStream copyOfFile=new FileOutputStream(directorium); copyOfFile.write(data); copyOfFile.close(); }catch(IOException ex){ Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } } @Override public String getName() throws RemoteException { // TODO Auto-generated method stub return name; } Xây dựng chương trình giao diện cho Server, đăng kí dịch vụ với rmiregistry: 30 Tạo giao diện cho Server với nút kích hoạt server, để khởi chạy hàm launchServer: private void launchServer(java.awt.event.ActionEvent evt) { Registry register; try { System.setProperty("java.rmi.server.hostname","127.0.0.1"); register = LocateRegistry.createRegistry(porti); register.rebind(ServerInterface.class.getSimpleName(), new Server()); System.out.println(ServerInterface.class.getSimpleName()); activeServer.setEnabled(false); LogIn.setEnabled(false); JOptionPane.showMessageDialog(null, " Server sẵn sàng! "); }catch (RemoteException ex) { JOptionPane.showMessageDialog(null, ex, "Lỗi, kết nối!", JOptionPane.ERROR_MESSAGE); Logger.getLogger(start_login.class.getName()).log(Level.SEVERE, null, ex); } } Xây dựng chương trình giao diện cho client, định vị dịch vụ đăng kí server Tạo giao diện ứng dụng cho client, đăng kí dịch vụ khởi tạo: Registry registry = LocateRegistry.getRegistry("127.0.0.1", 2020); ServerInterface server = (ServerInterface) registry.lookup(ServerInterface.class.getSimpleName()); 31 Chương 3.1 Kết Quả Xây Dựng Chương Trình Chương trình demo Khởi động server Kích hoạt Server khởi động dịch vụ cổng 2020, thông báo server sẵn sàng hiển thị, khơng thơng báo kích hoạt khơng thành công xuất với thông số lỗi kĩ thuật Lúc Server lắng nghe yêu cầu dịch vụ client Khởi động Server Thơng báo kích hoạt không thành công 1 Khởi chạy máy client nhập nickname Chạy ứng dụng client Nickname Nguyễn Văn A, nhấn vào nút “Bắt đầu họp” để vào phòng Nhập nickname 32 Một hộp thoại thông báo đăng nhập thành công hiển thị Lúc client Nguyễn Văn A gửi yêu cầu dịch vụ đăng nhập tới server server lưu client vào danh sách Ngược lại thông báo lỗi xuất hiện, nhấn OK để cố gắng đăng nhập lại Thông báo lỗi không đăng nhập Giao diện ứng dụng Nguyễn Văn A tạo thành công Giao diện ứng dụng Nguyễn Văn A 33 Tương tự client Nguyễn Văn B Giao diện ứng dụng Nguyễn Văn B Chạy tính gửi tin, gửi tệp xem người trực tuyến Client Nguyễn Văn A nhắn tin với client Nguyễn Văn B Nhập tin nhắn trường “Nhập tin nhắn” nhấn nút gửi Chức gửi tin nhắn 34 Để sử dụng chức gửi file, người dùng cần kích vào nút gửi file Hộp thoại chọn file hiển thị, chọn tệp thư mục nhấn nút open để gửi file, chương trình thực địa localhost nên q trình chuyển file mơ thư mục Disk D thay cho thư mục Network thực tế, ( file gửi chuyển đến thư mục Network ) Chọn file để gửi Nhấn Open để hoàn tất gửi file Chức gửi file 35 Kích vào nút “Online” để thị số người online phòng Chức online 3.2 Kết luận 3.2.1 - Đánh giá công nghệ Nắm rõ hiểu biết quy trình, cách thức hoạt động hệ thống phân tán Hiểu biết, vận dụng thành cơng cơng nghệ RMI vào tốn cụ thể Nắm vững bước thiết lập, xây dựng chương trình tảng ngơn ngữ lập trình JAVA 3.2.2 Đánh giá ứng dụng Ưu điểm - Giao diện chương trình đơn giản, dễ sử dụng - Các chức sử dụng tốt, đáp ứng yêu cầu - Chương trình dung lượng nhẹ, chạy tốt nhiều hệ điều hành Hạn chế - Chưa tối ưu hóa phát huy tối đa chức mà chương trình mang lại - Cịn nhiều chức chưa phát triển, đơi xảy lỗi 36 Hướng phát triển - Khắc phục lỗi xảy chương trình Xây dựng số tính đa ngơn ngữ, nhắn tin riêng, xây dựng hệ thống chức quản lý bên quản trị: kick thành viên nhóm chat, chặn từ ngữ tục tĩu … Tài liệu tham khảo Bogdan Ciubotaru Gabriel-Miro Muntean (2013) - Network Application Programming with Java Advanced Network Programming Principles and Techniques Paul Krzyzanowski – Distributed Systems Programming with java RMI An Brief Introduction Khoa CNTT ĐHSP KT Hưng Yên - Phát triển Hệ thống phân tán Patrick Neubauer, Tenzin Dakpa - Free University of Bolzano Distributed Systems – Java RMI Chat System Project documentation Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin TT, ĐH Cần Thơ - RPC RMI 37