Giáo trình Java Tập 2 Phần 1: Lập trình mạng và phân tán đối tượng - Đinh Bá Tiến, Hoàng Bức Hải

Giáo trình Java Tập 2 Phần 1 cung cấp kiến thức nền tảng và thực hành về ngôn ngữ lập trình Java. Tài liệu hướng dẫn chi tiết từ cơ bản đến nâng cao, phù hợp

Chuyên ngành

Công nghệ thông tin

Tác giả

Phương Lan

Người đăng

Ẩn danh

Thể loại

Giáo trình
293
0
0

Phí lưu trữ

55 Point

Tóm tắt

I. Tổng quan về giáo trình Java tập 2 phần 1

Giáo trình Java tập 2 phần 1 giới thiệu nền tảng lập trình mạng và công nghệ phân tán trong Java. Nội dung bao gồm ba chương chính. Chương 1 trình bày lập trình mạng với giao thức TCP/IP và socket. Chương 2 giới thiệu kỹ thuật RMI cho lập trình phân tán đối tượng. Chương 3 khám phá CORBA, một tiêu chuẩn cho phân tán đa nền tảng. Phần này cung cấp kiến thức từ lý thuyết đến cài đặt thực tế. Người học sẽ nắm được cách kết nối mạng, giao tiếp client/server, và xây dựng ứng dụng phân tán. Giáo trình phù hợp cho sinh viên và lập trình viên muốn mở rộng kỹ năng Java về mạng.

1.1. Mục tiêu học tập của phần 1

Mục tiêu học tập của phần 1 bao gồm nhiều khía cạnh. Trước hết, người học sẽ hiểu cách mạng Internet hoạt động và vai trò của giao thức TCP/IP. Thứ hai, họ sẽ học cách lập trình socket để tạo kết nối mạng. Thứ ba, phần này giới thiệu lập trình phân tán với RMI, cho phép gọi phương thức từ xa. Thứ tư, CORBA được trình bày như một tiêu chuẩn đa nền tảng. Người học cũng sẽ thực hành viết mã và gỡ lỗi. Cuối cùng, họ sẽ áp dụng kiến thức vào các bài tập thực tế.

1.2. Cấu trúc chương trình trong phần 1

Phần 1 của giáo trình Java tập 2 được chia thành ba chương chính. Chương 1 tập trung vào lập trình mạng cơ bản, bao gồm giao thức TCP/IP, socket và mô hình client/server. Chương 2 giới thiệu RMI, một công nghệ cho phép đối tượng giao tiếp từ xa trong Java. Chương 3 khám phá CORBA, sử dụng IDL để định nghĩa giao diện phân tán. Mỗi chương bao gồm lý thuyết, ví dụ mã nguồn và hướng dẫn cài đặt. Phụ lục cung cấp tóm tắt ngôn ngữ Java để hỗ trợ học tập.

II. Phân tích nội dung lập trình mạng trong phần 1

Nội dung phần 1 giáo trình Java tập 2 đề cập đến nhiều khái niệm phức tạp. Lập trình mạng với Java yêu cầu hiểu biết về giao thức TCP/IP và cách dữ liệu được truyền trên mạng. Kỹ thuật RMI và CORBA giới thiệu lập trình phân tán, nơi các đối tượng có thể tương tác từ xa. Thách thức bao gồm việc xử lý kết nối mạng, bảo mật và hiệu suất. Người học cần nắm vững nguyên lý socket để xây dựng ứng dụng client/server. Giáo trình cung cấp ví dụ cụ thể để minh họa các khái niệm này. Tuy nhiên, thực hành nhiều là cần thiết để thành thạo.

2.1. Các khái niệm cốt lõi về TCP IP và Socket

TCP/IP là giao thức nền tảng cho giao tiếp trên Internet. Giáo trình giải thích cách dữ liệu được chia thành gói và truyền đi. Socket là điểm cuối để kết nối mạng, cho phép chương trình giao tiếp. Phần này trình bày cách sử dụng socket trong Java để tạo kết nối client/server. Ví dụ mã nguồn minh họa cách gửi và nhận dữ liệu. Người học sẽ hiểu vai trò của địa chỉ IP và cổng trong kết nối mạng.

2.2. Thách thức trong lập trình phân tán với RMI

Lập trình phân tán với RMI mang lại nhiều thách thức. RMI cho phép gọi phương thức từ xa, nhưng cần xử lý ngoại lệ RemoteException. Đăng ký đối tượng với trình registry là bước quan trọng. Giáo trình chỉ ra rằng kế thừa UnicastRemoteObject có thể không khả chuyển sang các công nghệ khác như CORBA. Người học cần hiểu cách thức hoạt động của stub và skeleton. Thực hành với ví dụ giúp vượt qua các thách thức này.

III. Giải pháp học hiệu quả phần 1 giáo trình Java

Để học hiệu quả phần 1 giáo trình Java tập 2, người học nên áp dụng phương pháp thực hành. Bắt đầu với các ví dụ đơn giản về socket để hiểu lập trình mạng. Tiếp theo, thực hiện bài tập về RMI và CORBA để nắm vững lập trình phân tán. Sử dụng công cụ phát triển như Eclipse để gỡ lỗi mã nguồn. Tham gia cộng đồng lập trình để giải đáp thắc mắc. Giáo trình cung cấp tài liệu tham khảo và mã nguồn mẫu. Lập kế hoạch học tập đều đặn giúp tiến bộ nhanh chóng.

3.1. Phương pháp thực hành với ví dụ cụ thể

Phương pháp thực hành là cách tốt nhất để học lập trình mạng. Bắt đầu với ví dụ Hello World trong RMI để hiểu cơ chế. Sử dụng công cụ như rmic để tạo stub và skeleton. Thử nghiệm với CORBA bằng cách viết IDL và triển khai đối tượng. Giáo trình cung cấp nhiều ví dụ có sẵn để chạy thử. Ghi chú lại các lỗi và cách khắc phục để học hỏi kinh nghiệm.

3.2. Sử dụng công cụ phát triển và gỡ lỗi

Công cụ phát triển như Eclipse hoặc IntelliJ IDEA hỗ trợ viết và gỡ lỗi mã Java. Sử dụng trình gỡ lỗi để theo dõi luồng thực thi trong ứng dụng mạng. Công cụ như Wireshark có thể giám sát lưu lượng mạng để hiểu giao thức. Giáo trình khuyến khích cài đặt Tomcat cho các phần sau, nhưng phần này tập trung vào RMI và CORBA. Thực hành với môi trường phát triển tích hợp giúp tăng năng suất.

IV. Kết luận và ứng dụng thực tế của phần 1

Phần 1 giáo trình Java tập 2 cung cấp kiến thức nền tảng về lập trình mạng và phân tán. Người học đã nắm vững TCP/IP, socket, RMI và CORBA. Kiến thức này áp dụng trong xây dựng hệ thống phân tán, ứng dụng client/server và dịch vụ web. Trong thực tế, RMI và CORBA được sử dụng trong các dự án doanh nghiệp. Phần này chuẩn bị cho các phần tiếp theo về Servlet, JSP và EJB. Tiếp tục học tập và thực hành sẽ giúp thành thạo lập trình mạng Java.

4.1. Tổng kết kiến thức đã học

Tổng kết phần 1, người học đã hiểu cách mạng Internet hoạt động và vai trò của giao thức TCP/IP. Họ biết lập trình socket để tạo kết nối mạng. Kỹ thuật RMI và CORBA cho phép xây dựng ứng dụng phân tán. Giáo trình cung cấp nền tảng vững chắc cho lập trình mạng Java. Kiến thức này là bước đệm cho các công nghệ web hiện đại.

4.2. Ứng dụng trong dự án thực tế

Ứng dụng của phần 1 trong thực tế bao gồm xây dựng hệ thống chat, ứng dụng ngân hàng trực tuyến, và dịch vụ web phân tán. RMI được sử dụng trong các ứng dụng Java EE. CORBA hỗ trợ tích hợp hệ thống đa nền tảng. Kiểu kiến thức này rất có giá trị trong ngành công nghiệp phần mềm. Người học có thể áp dụng vào dự án cá nhân hoặc công việc để nâng cao kỹ năng.

Tóm tắt và mô tả trên trang này được tạo với sự hỗ trợ của AI. Nếu bạn thấy nội dung không chính xác hoặc có vấn đề, vui lòng Báo lỗi nội dung.

21/04/2026

Trích đoạn nội dung tài liệu

Chương 1: Lap trình mạng với Java 41 in = new BufferedReader (new Input StreamReader (connection.getInputStream())); 11 Lấy uê luông xuất dùng gửi dữ liệu đến máy chủ out= new DataOutputStream( connection.print1n("Connected to server at port 3456.")z } catch (Exceptione) { 11 Nếu gặp lỗi thì in lỗi ra màn hình System.println(e); } } /* Phương thức này sẽ nhận chuỗi dữ liệu từ bàn phím oà gửi đến máy chủ xử lý me public void requestServer() { //Tao luéng dé doc dữ liệu từ bàn phím BufferedReader keyboardInput = new BufferedReader( new InputStreamReader (System.in) ); boolean finished=false; do { try{ 11Tạo menu lựa chọn. S: gửi dữ liệu, R: nhận dữ liệu, Q: chấm ditt System.£1ush () ; String line = keyboardInput .readLine(); if (line.length()>0){ 1ine=line.toUpperCase () ; switch (1line.charAt (0) ) { 1INếu người dùng chọn S đữ liệu nhập uào sẽ được gửi đến máy chủ case '8': String sendLine = keyboardInput .flush(); break; ys Nếu người dùng chon R dữ liệu do máy chủ xử lý sẽ được nhdn vé va in ra xử case 'R': M 42 Chương 1: Lập trình mạng với Java int inByte; System.print (">>>>");7 while ((inByte = in.printin(); break; Nếu người dùng chọn Q chương trình sẽ chấm dit case 'Q': finished=true; break; default: break; } } }eatch (Exception e) { LJNếu có lỗi xuất nhập thì in lỗi ra màn hình System.println(e); } } while(!finished); } [* Phương thức này được dùng để đóng kết nối từ máy khách uới máy chủ xố public void shutđown( ) { try( connection.print1n("IO error closing socket") ; } } } Biên dịch chương trình: >javac EchoClient.java Hãy chạy chương trình EchoServer trên một máy và EchoClient trên một máy khác nếu có hệ thống mạng (cả hai máy đều phải cài đặt máy ảo Java). Nếu thử nghiệm trên một máy đơn ta có thể mô phỏng mô hình khách/ chủ bằng cách mở hai cửa sổ dòng lệnh của DOS (DOS Prompt). EchoClient sẽ chạy trên một cửa sổ còn Echo8erver chạy trên cửa sổ khác, quan sát kết quả trả về để thấy được cách mà mô hình kháchchủ làm việc (nhớ là hãy chạy Chương 1: Lập trình mạng với Java a3 EchoServer trước rồi mới đến EehoClient).

Dưới đây là kết quả thử nghiệm: Trên cửa số máy chủ : >java EchoServer Echo Server is listening on port 3456. Trên cửa số máy khách: >java EchoClient my. server Connected to server at port 3456. Send, receive, or quit (S/R/Q): Và sau đây là quá trình trao đổi giữa máy khách và máy chủ: Máy khách _ Máy chủ Send, receive, or quit Received: Hello (5/R/Q):s Sent: olleH Hello Send, receive, or quit (8/R/Q):r >>>> olleH Send, receive, or quit Received: 123456789 (S/R/Q): s Sent: 987654321 123456789 Send, receive, or quit.

SU DUNG UDP SOCKET Trên đây là cách kết nối và truyền dữ liệu trên mạng theo giao thie TCP. Nhu da để cập, mặc dù truyền dữ liệu theo giao thức UDP không chính xác và bảo đảm bằng TCP nhưng bù lại nó không đòi hỏi nhiều tài nguyên của hệ thống, quá trình xử lý và tiếp nhận dữ liệu cũng đơn giản hơn nhiều. Dữ liệu gửi đi theo giao thức UDP thường được đóng trong một gói (data package) bao gồm địa chỉ IP của máy nhận, số cổng cùng với dữ liệu thật sự. UDP được dùng trong các ứng dụng mang tính chất thông báo như về giá cả, thời tiết.

Dưới đây ta sẽ xây dựng một mô hình ứng dụng khách/chủ (client/server) sử dụng lớp DatagramSocket và DatagramPackage để kết nối và trao đổi thông tin giữa máy khách và máy chủ bằng giao thức UDP. Chương trình ExchangeRateServer tại máy chủ sẽ cung cấp tỉ giá hối đoái của 3 thị-trường chứng khoán Tokyo, NewYork và HongKong. Chương trình tại máy khách ExchangeRateTable sẽ cập nhật liên tục những thông tin này sau mỗi giây. Xây dựng chương trình ExchangeRateServer ExchageRateServer chạy trên máy chủ và đón nhận dữ liệu do máy khách gửi đến cổng 2345.

Khi nhận được yêu cầu, máy chủ sẽ gửi trả các thông báo về tỉ giá kèm theo ngày giờ mới nhất về cho máy khách. Ta sử dụng hàm random cia lép Math dé lay vé ti giá mang tính chất ngẫu nhiên của 3 thị trường là Tokyo, NewYork và HongKong. Dữ liệu được nhận và gửi theo từng gói dựa vào lớp DatagramPackage. Chương trình chạy trên máy chủ cung cấp tỉ giá của các thị trường chứng khoán.

Vi du 1-3: ExchangeRateServer.java import java.*; public class ExchangeRateServer { public static void main(String args[]) { try{ Chương 1: Lap trình mạng với Java 45 11Tạo đối tượng kết nối soebet theo giao thức UDP tại cổng 2345 DatagramSocket socket = new DatagramSocket (2345) ; / | Lay vé địa chỉ uà số cổng kết nối của máy chủ String localAddress = InetAddress.trim(); int localPort = socket .getLocalPort (); / [In cde thông tin ra màn hình System.println("Exchange rate server is listening on port "+localPort+"."); 11Tạo bộ đệm dùng để gửi uà nhận dữ liệu do máy bhách gửi đến int bufferLength = 256; byte outBuffer[]; byte inBuffer[] = new byte [bufferLength] ; //Tao goi dữ liệu để gửi di DatagramPacket outDatagram; // Tao goi da ligu dé nhan vé DatagramPacket inDatagram = new DatagramPacket (inBuffer, inBuffer.length); 1 [Vong lặp chờ nhận dữ liệu do máy khách gửi đến boolean finished = false; do { /* Chờ nhận dữ liệu. : Luu § : Di ligu nhận uê sẽ được đưa uào gói inDatagram bao gồm cả dữ liệu cộng véi địa chỉ của máy khách, số cổng mà tại đó dữ liệu đã được gửi di. Phương thức receiue này thực sự dừng lại chờ cho đến khi nhận được gói đữ liệu mới chạy tiếp các lệnh kế.receive (inDatagram) ; /* Đã nhận được một gói dữ liệu từ phía máy khách. Lấy nội dung của gói dữ liệu, địa chỉ, số cổng nà.

in ra màn hình Xử InetAddress destAddress = inDatagram.getAddress(); String destHost = destAddress.trim(); int destPort = inDatagram.print1n ("\nReceived a datagram from "+đestHost+" at port "+đestPort+" String data = new String(inDatagram.print1n("Tt contained the đata: "+đata); M 46 Chương I1 : Lập trình mạng với Java 1INếu nội dung gửi đến là chuỗi "qui" thì chấm dứt kết nối if (data.toString(); s=s+"\n NewYork :"+getNewYorkRate(); +"\n Tokyo +getTokyoRate(); s=s+"\n HongKong +getHongKongRate(); //Gii thong bao ti gia dén may khach outBuffer=s.getBytes(); outDatagram = new DatagramPacket (outBuffer, outBuffer.length, destAddress,destPort) ; socket .println("Sent "+s+" to "+đestHost+ "at port"+destPort+".print1n("IOException occurred."); } } Phương thức này trả uề tỉ giá ngẫu nhiên của thị trường chứng khodn NewYork cự, private static String getNewYorkRate() { returh Double. random()*135); 2 y* Phuong thite nay tra vé ti gid ngdu nhién cua thị trường chứng khoán Tolyo 7 private static String get TokyoRate() { return Double.random()*135); + y* Phuong thite nay tré vé tỉ giá ngẫu nhiên của thị trường chứng khoén HongKong sỹ private static String getHongKongRate() { return Double.random()*135); } } Biên dịch chương trình: >javac ExchangeRateServer.java Chương 1 : Lap ents mang voi Jove 4z [M Chương trình ExchangeRateServer sẽ được sử dụng khi ta thiết kế xong chương trình ExchangeRateTable dùng cho máy khách. Xây dựng chương trình ExchangeRateTable ExchangeRateTable chạy trên máy khách, nó chịu tránh nhiệm mỗi giây gửi yêu cầu đến máy chủ để cập nhật thông tin về tỉ giá của thị trường chứng khoán. Để đạt được mục tiêu này chương trình của ta phải xây dựng 3 lớp: se Lớp ExchangeRaterable Là lớp chương trình chính dùng tạo một cửa sổ trình bày tỉ giá của các thị trường chứng khoán trong một vùng văn bản TextArea.

+ Lớp ExchangeThread Đây là một phân tuyến chạy song song với chương trình chịu trách nhiệm mỗi giây sẽ gửi yêu cầu đến máy chủ và lấy số liệu về cập nhật. ¢ Lép ExchangeData Là lớp thực hiện kết nối với máy chủ, lớp này sẽ thực sự cài oe phương thức getRates dùng để gửi yêu cầu và nhận đữ liệu trả ví từ máy chủ. Dưới đây là toàn bộ chương trình ExchangeRateTable: Ví dụ 1-4: ExchangeRateTable.java import java.*; public class ExchangeRateTable{ public static void main(String args[]){ 11Tạo cửa sổ cho chương trình chính Frame myWindow = new Frame ("Stock Exchange Application"); //Ving van ban dùng để thông báo tỉ giá TextArea rateTable = new TextArea("Wait .")7 Label rateLabel = new Label ("Exchange Rate Table"); / [Dat vi tri cho cdc đối tượng rateTable.add(rateLabel, null); //Xu ly tình huống cho cửa sổ chương trình chính myWindow.ađäWindow1I,i stener (new WindowAdapter () { public void windowClosing (WindowEvent event) { System.rateTable=rateTable; } public void run() { while (true) { String data=rate.getRates() ;//Ldy ti gid mới từ máy chủ rateTable.setText (data); //Cập nhật bảng tỉ giá đelay (1000); } } I1Phương thức này dùng. trì hoãn một khoảng thời gian của phân tuyển Chương 1: Lập trình mạng với Java private void delay(int miliSeconds) { try { this.println("Sleep error !"); } Is Thiết bế lớp ExchangeData chịu trách nhiệm gửi uà nhận số liệu trả uề từ máy chủ */ class ExchangeData { DatagramSocket socket; +1Đối tượng lưu giữ kết nối InetAddress serverAddress; String localHost; 11Tạo bộ đệm dùng để gửi uà nhận dữ liệu do máy chủ gửi đến int bufferLength = 256; byte inBuffer[] = new byte[bufferLength] ; byte outBuffer[]; DatagramPacket outDatagram; //G6i dữ liệu dùng để gửi di DatagramPacket inDatagram; //Gói dữ liệu dùng để nhận uễ public ExchangeData() { try{ //Tao déi tugng két néi socket theo giao thức UDP socket = new DatagramSocket (); //Ta0 gi dữ liệu dùng để nhận uề inDatagram = new DatagramPacket (inBuffer, inBuffer.length) ; //Léy vé déi tugng InetAddress cho biét chi tiét địa chỉ máy chủ serverAddress = InetAddress.server") ; } catch (Exception e) { System.println("connect error!"); } } Phương thức này được dùng để chuyển yêu cầu uà nhận dữ liệu trả oề từ máy chủ eh bì 50 Chương 1: Lập trình mạng với Java public String nen Of String data=""; try{ //Tqo vung dém va giti yeu cầu cập nhật tỉ giá đến máy chủ outBuffer = new byte[bufferLength] ; outBuffer = "rate".getBytes(); outDatagram = new DatagramPacket (outBuffer, outBuffer.length, serverAddress, 2345); socket .println("\nSent server at port 2345."); /I Chờ nhận hết quả trả uề từ máy chủ socket .receive (inDatagram) ; / | Ly thong tin ti g6i dữ liệu uửa nhận được InetAddress destAddress = inDatagram.getAddress(); String destHost = destAddress.trim(); int destPort = inDatagram.println("Received a data package from" Lf +destHost+" at port "+destPort+"."); / (Ldy di liéw that su chita trong goi data = new String (inDatagram.getData()); data=data.print1n("IOException occurred.

} return data; } 3 Biên dịch chương trình: >java ExchangeRateTable. java Tương tự như chương trình EchoServer và EchoClient, hãy chạy chương trình ExchangeRateServer trên một máy và ExchangeRateTable trên một máy khác nếu có hệ thống mạng (cả hai máy đều phải cài đặt máy ảo Java). Nếu thử nghiệm trên một máy đơn ta có thể mô phỏng mô hình khách/chủ bằng cách mở hai cửa sổ dòng ệnh của DOS (DOS Prompt). ExchangeRateTable sé chay trên một cửa sổ còn ExchangeRateServer chạy trên cửa sổ khác, quan sát kết quả trả về để thấy được bảng tỉ giá được gửi đi và cập nhật như thế nào ở cả hai phía máy khách và máy chủ (nhớ là hãy chạy ExchangeRateServer trước rồi mới đến ExchangeRateTable).

Dưới đây là kết quả thử nghiệm: Chương 1: Lập trình mạng với Java si (Al Trên cửa sổ máy chủ: >java ExchangeRateServer Echo Server is 1istening on port 3456. Trên cửa số máy khách: >java ExchageRateTable > eee Ewchange Application Khi chương trình ExchangeRateTable vừa chạy cứ cách khoảng 1 giây lại gửi yêu cầu đến máy chủ yêu câu cập nhật số liệu về tỉ giá.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ