Bài giảng lập trình mạng bằng ngôn ngữ java chương 5 dương khai phong

45 311 1
Bài giảng lập trình mạng bằng ngôn ngữ java  chương 5   dương khai phong

Đ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

www.sites.google.com/site/khaiphong Giáo viên: Dương Khai Phong Email: khaiphong@gmail.com Lý thuyết: 45 tiết Thực hành: 30 tiết ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong Nội dung môn học Tổng quan lập trình java Lập trình hướng đối tượng Lập trình giao diện đồ họa Lập trình mạng Ơn tập ĐH Cơng nghệ Thơng tin www.sites.google.com/site/khaiphong LẬP TRÌNH MẠNG CĂN BẢN A Giới thiệu lập trình mạng B Các lớp hỗ trợ lập trình mạng Socket C TCP Socket Programming D UDP Socket Programming E Remote Method Invocation (RMI) ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong LẬP TRÌNH MẠNG CĂN BẢN A Giới thiệu lập trình mạng:  Các khái niệm liên quan đến lập trình mạng:  Mạng máy tính  Ports  Sockets Ports  Mơ hình Client – Server  Socket Programming ĐH Cơng nghệ Thơng tin www.sites.google.com/site/khaiphong LẬP TRÌNH MẠNG CĂN BẢN A Giới thiệu lập trình mạng:  Các khái niệm liên quan đến lập trình mạng:  Mạng máy tính  Ports  Sockets Ports  Mơ hình Client – Server  Socket Programming ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA A Giới thiệu lập trình mạng:  Mạng máy tính  Mạng máy tính:  Mạng máy tính tập hợp máy tính thiết bị nối với đường truyền vật lý theo kiến trúc  Tầng ứng dụng  Standard apps • HTTP • FTP • Telnet  User apps  Tầng vận chuyển  TCP  UDP  Programming Interface: • Sockets  Tầng mạng  IP  Tầng kết nối  Device drivers ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA A Giới thiệu lập trình mạng:  Mạng máy tính  Mạng máy tính: Application (http,ftp,telnet,…) Transport (TCP, UDP, ) Network (IP, ) Link (device driver, )   TCP (Tranmission Control Protocol) giao thức vận chuyển dựa kết nối logic trực tiếp máy tính Ví dụ:  HTTP  FTP  Telnet ĐH Cơng nghệ Thơng tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA A Giới thiệu lập trình mạng:  Mạng máy tính  Mạng máy tính: Application (http,ftp,telnet,…)  Transport (TCP, UDP, ) Network (IP, ) Link (device driver, )  UDP (User Datagram Protocol) giao thức vận chuyển phi kết nối thực gửi packets gọi datagrams từ máy sang máy khác Ví dụ:  Clock server  Ping ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA A Giới thiệu lập trình mạng:  Mạng máy tính  Ports  Ports:  TCP UDP sử dụng port để xác định chương trình nhận liệu đến máy tính server P o r t TCP app app app app port port port port Client TCP or UDP Packet Data port# data ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA A Giới thiệu lập trình mạng:  Mạng máy tính  Ports  Ports:  Port số nguyên  Một số port dành riêng cho dịch vụ mạng phổ biến:     ftp 21/tcp telnet 23/tcp smtp 25/tcp login 513/tcp  Nên dùng giá trị lớn 1024 ĐH Công nghệ Thơng tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA D UDP Socket Programming: import java.io.*; import java.net.*; UDP_MYSERVER.JAVA public class tcp_myserver{ public static void main(String args[]) { try{ byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; // Khởi tạo đối tượng DatagramSocket serverSocket = new DatagramSocket(9876); System.out.println("Dang cho ket noi tu client"); // Nhận liệu gởi từ client DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); String sentence = new String( receivePacket.getData()); System.out.println(": " + sentence); > // Gởi liệu client InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); serverSocket.close();}} catch(IOException ioException){ ioException.printStackTrace();} ĐH Công nghệ Thông tin }} www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA D UDP Socket Programming: import java.io.*; import java.net.*; UDP_MYSERVER.JAVA public class tcp_myserver{ public static void main(String args[]) { try{ byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; // Khởi tạo đối tượng DatagramSocket serverSocket = new DatagramSocket(9876); System.out.println("Dang cho ket noi tu client"); // Nhận liệu gởi từ client // Xử lý liệu nhận DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); String capitalizedSentence = sentence.toUpperCase(); serverSocket.receive(receivePacket); sendData = capitalizedSentence.getBytes(); String sentence = new String( receivePacket.getData()); System.out.println(": " + sentence); > // Gởi liệu client InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); serverSocket.close();} catch(IOException ioException){ ioException.printStackTrace();} ĐH Cơng nghệ Thơng tin }} www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA D UDP Socket Programming: import java.io.*; import java.net.*; public class tcp_myserver{ public static void main(String args[]) { try{ byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; // Khởi tạo đối tượng DatagramSocket clientSocket = new DatagramSocket(9876); InetAddress IPAddress = InetAddress.getByName("localhost"); // Gởi liệu đến server BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); System.out.print(": "); String sentence = inFromUser.readLine(); sendData = sentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); // Nhận liệu gởi từ server DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println(": " + modifiedSentence); // Đóng kết nối clientSocket.close(); } catch(UnknownHostException e){ e.printStackTrace();} catch(IOException e){e.printStackTrace();} UDP_MYCLIENT.JAVA } ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI):  RMI vs Socket programming:  Với socket programming, phải tự tạo kết nối quản lý trình truyền nhận liệu  Phương pháp phức tạp dễ gây lỗi  JVM tạo kết nối quản lý trình truyền nhận liệu  Distributed programming model  Cho phép đối tượng (local objects) sử dụng đối tượng máy khác (remote objects) giống chạy máy ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI): Kiến trúc RMI JAVA PROGRAM Object Reference Client Server Stub RMI System Remote Object Skeleton REMOTE METHOD INVOCATION Remote Reference Layer REMOTE OBJECT Transport Client JVM Server JVM ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI):  Local Remote Objects:  Local objects • Các đối tượng nằm local hosts  Remote objects • Các đối tượng truy cập từ remote hosts • Các thể lớp phải cài đặt interface java.rmi.Remote  Property of remote objects • Tương tự local objects (arguments, downcasting, instanceof, etc) • Truy cập thông qua Stub ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI):  Định vị Remote Objects:  RMI registry • Directory service ánh xạ RMI objects thành tên tương ứng • Server: đăng ký và pubic remote object cho client • Client: tìm remote object tra RMI registry thông qua giao thức rmi, e.g., rmi://host:port/name • Sử dụng lớp java.rmi.Naming Method Description bind(name, obj) rebind(name, obj) unbind(name) lookup(url) list(url) Bind obj to name Bind obj to name even if already bound Remove the binding Return object bound to url Return a list of all bindings ĐH Cơng nghệ Thơng tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI):  Thi hành phương thức RMI marshalling unmarshalling Phương thức gọi thi hành có dạng sau: boolean somemethod(object x, object y) ĐH Cơng nghệ Thơng tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI):  RMI – Các bước thực (1)  Bước 01: Tạo giao diện (interface) khai báo phương thức đựợc gọi từ xa đối tượng  Bước 02: Tạo lớp cài đặt (class implement) cho giao diện khai báo  Bước 03: Viết chương trình Server  Bước 04: Viết chương trình Client  Bước 05: Dịch tập tin nguồn theo dạng RMI (rmic) để tạo lớp tương ứng stub cho client, skeleton cho server  Bước 06: Khởi động dịch vụ (rmiregistry)  Bước 07: Thực thi chương trình Server  Bước 08: Thực thi chương trình Client ĐH Cơng nghệ Thơng tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI):  Ví dụ 1: viết chương trình cho phép client thực gọi phương thức từ xa phía server để chuyển đổi chuỗi chữ thường sang chuỗi chữ hoa in dùng phương thức RMI  Các bước thực hiện:  Bước 1: Tạo giao diện (interface) MessageInterface khai báo phương thức đựợc gọi từ xa đối tượng import java.rmi.*; MessageInterface.JAVA public interface MessageInterface extends Remote{ String receiveMessage(String message) throws RemoteException; void printMessageAtServer(String message) throws RemoteException; } ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI):  Các bước thực hiện:  Bước 2+3: cài đặt (class implement) cho giao diện MessageInterface khai báo viết chương trình Server ĐH Cơng nghệ Thơng tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI):  Cácjava.rmi.*;import bước thực hiện: import java.rmi.registry.*; RMI_MYSERVER.JAVA import java.net.*;  java.rmi.server.*;import Bước 2+3: cài đặt (class implement) cho giao diện MessageInterface public class rmi_server extends java.rmi.server.UnicastRemoteObject implements khai báo viết chương trình Server MessageInterface{ String address; Registry registry; > public rmi_server() throws RemoteException{ try{ address = (InetAddress.getLocalHost()).toString();} catch(Exception e){ System.out.println("can't get inet address.");} int port=6789; System.out.println("this address=" + address + ",port=" + port); try{registry = LocateRegistry.createRegistry(port); registry.rebind("remote_Methods", this);} catch(RemoteException e){System.out.println("remote exception"+ e);} } public static void main(String args[]){ try{ rmi_server server = new rmi_server();} catch (Exception e){e.printStackTrace();System.exit(1); }}} ĐH Cơng nghệ Thơng tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI):  Cácjava.rmi.*;import bước thực hiện: import java.rmi.registry.*; RMI_MYSERVER.JAVA import java.net.*;  java.rmi.server.*;import Bước 2+3: cài đặt (class implement) cho giao diện MessageInterface public class rmi_server extends java.rmi.server.UnicastRemoteObject implements khai báo viết chương trình Server MessageInterface{ String address; Registry registry; > public rmi_server() throws RemoteException{ try{ address = (InetAddress.getLocalHost()).toString();} // Càie){ đặtSystem.out.println("can't (class implement) cho giao diệnaddress.");} MessageInterface catch(Exception get inet public String receiveMessage(String message) throws RemoteException{ int port=6789; return message.toUpperCase(); System.out.println("this address=" + address + ",port=" + port); } try{registry = LocateRegistry.createRegistry(port); public void printMessageAtServer(String message) throwsRemoteException{ registry.rebind("remote_Methods", this);} System.out.println(" :"+message); catch(RemoteException e){System.out.println("remote exception"+ e);} } } public static void main(String args[]){ try{ rmi_server server = new rmi_server();} catch (Exception e){e.printStackTrace();System.exit(1); }}} ĐH Cơng nghệ Thơng tin www.sites.google.com/site/khaiphong TỔNG QUAN LẬP TRÌNH JAVA E Remote Method Invocation (RMI):  Cácjava.rmi.*;import bước thực hiện: import java.rmi.registry.*; RMI_MYCLIENT.JAVA import  java.net.*; Bước 2+3: cài đặt (class implement) cho giao diện MessageInterface public class rmi_client { khai báo viết chương trình Server public static void main(String[] args) { MessageInterface rmiServer; Registry registry; String serverAddress = "localhost"; // Địa IP máy Server int serverPort = 6789; String text="Xin chao"; System.out.println("sending " + text + " to " +serverAddress + ":" + serverPort); try{ registry=LocateRegistry.getRegistry(serverAddress, serverPort); rmiServer=(MessageInterface)(registry.lookup("remote_Methods")); rmiServer.printMessageAtServer(text); // gọi phương thức từ xa System.out.print(rmiServer.receiveMessage(text)); } catch(RemoteException e){e.printStackTrace();} catch(NotBoundException e){System.err.println(e);} }} ĐH Công nghệ Thông tin ...www.sites.google.com/site/khaiphong Nội dung môn học Tổng quan lập trình java Lập trình hướng đối tượng Lập trình giao diện đồ họa Lập trình mạng Ôn tập ĐH Công nghệ Thông tin www.sites.google.com/site/khaiphong LẬP TRÌNH... TỔNG QUAN LẬP TRÌNH JAVA B Các lớp hỗ trợ lập trình mạng Socket:  Gói java. net chứa tất lớp cần thiết cho việc lập trình mạng (Java Sockets Programming)  Cú pháp khai báo: import java. net.*;... nghệ Thông tin www.sites.google.com/site/khaiphong LẬP TRÌNH MẠNG CĂN BẢN A Giới thiệu lập trình mạng:  Các khái niệm liên quan đến lập trình mạng:  Mạng máy tính  Ports  Sockets Ports  Mô

Ngày đăng: 03/12/2015, 19:42

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan