1. Trang chủ
  2. » Hoá học lớp 11

Lập trình mạng - Chương 5: Lập trình mạng với Java

7 25 0

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

THÔNG TIN TÀI LIỆU

Nội dung

Server gửi trả dữ liệu qua địa chỉ và cổng của client chứa trong gói tin này. Tham khảo ví dụ:[r]

(1)

Chương 5

1

LẬP TRÌNH MẠNG VỚI Java

(Gói thư viện Java.net)

Nội dung

Giới thiệu gói thư viện Java.net

Sử dụng TCP socket

Sử dụng UDP socket

2

RMI kỹ thuật phân tán đối tượng

Giới thiệu gói thư viện Java.net

Một số lớp cần thiết gói thư viện java.net:

InetAddress: quản lý địa Internet Socket: tạo kết nối từ client đến server

ServerSocket: tạo kết nối từ phía server đến ServerSocket: tạo kết nối từ phía server đến

client

DatagramSocket: gửi nhận liệu dạng gói tin

DatagramPackage: gói tin chứa liệu gửi nhận sử dụng cho lớp DatagramSocket

URL: địa định vị tài nguyên mạng

Lớp InetAddress

Sử dụng để quản lý địa host theo tên hay số

Các phương thức thường sử dụng:

• static InetAddress getLocalHost() : trả đối tượng InetAddress địa máy cục bộ(localhost)

• static InetAddress getByName(String hostName):

trả đối tượng InetAddress địa máy có tên trả đối tượng InetAddress địa máy có tên hostName

• static InetAddress[] getAllByName(String

hostName): trả tất đối tượng InetAddress địa máy có tên hostName

• byte[] getAddress(): trả địa IP đối tượng InetAddress dạng chuỗi byte

(2)

Lớp InetAddress(tt)-Ví dụ

try{

//Ly đối tượng InetAddress cha thông tin v máy ch

InetAddress host=

InetAddress.getByName(“www.hcmutrans.edu.vn”);

5 Sytem.out.println(“Host Name :”+host.getHostName()); Sytem.out.println(“IP Address:”+host.getHostAddress()); }

catch( UnknownHostException e){

System.out.println(“Address not found!”); }

Lớp Socket

Sử dụng cho client kết nối đến server

Các hàm tạo

• Socket(String hostName,int port): tạo đối tượng socket kết nối đến server hostName số hiệu cổng port

6

• Socket(InetAddress address,int port): tạo đối tượng socket kết nối đến address port

• Socket(String hostName, int port, boolean stream): tạo đối tượng socket kết nối đến hostName port, stream=true qui định kết nối theo TCP, stream=false qui định kết nối theo UDP Tuy nhiên sử dụng socket theo UDP nên sử dụng lớp DatagramSocket

Lớp Socket(tt)

Các phương thức thường sử dụng:

• InputStream getInputStream() : lấy luồng nhập để nhận liệu từ máy xa

• OutputStream getOutputStream(): lấy luồng xuất để gửi liệu đến máy xa

xuất để gửi liệu đến máy xa

• InetAddress getInetAddress(): trả đối tượng InetAddress chứa địa máy kết nối đến

• int getPort(): trả số hiệu cổng sử dụng máy kết nối

• void close(): đóng socket, cắt kết nối

Lớp Socket(tt)-Ví dụ

try{

//Kết ni đến máy ch

Socket mySocket=new Socket(“www.hcmutrans.edu.vn”,8080);

//Lung nhâp để nhn d liu

DataInputStream inStream=new DataInputStream(mySocket.getInputStream());

//Lung xut để gi d liu

DataOutputStream outStream=new DataOutputStream(mySocket.getOutputStream()); DataOutputStream outStream=new DataOutputStream(mySocket.getOutputStream());

//Bt đầu gi nhn d liu qua inStream outStream …

}

(3)

Lớp ServerSocket

Sử dụng cho server, tạo socket lắng

nghe kết nối port

Hàm tạo phương thức:

• ServerSocket(int port): tạo đối tượng socket lắng

9

• ServerSocket(int port): tạo đối tượng socket lắng nghe port

• Socket accept(): dừng lại đợi client kết nối đến, nhận thông tin kết nối trả đối tượng Socket kết nối với client

• void close(): cắt kết nối đóng socket

Lớp ServerSocket(tt)-Ví dụ

try{

//To serverSocket lng nghe cng 12345 ServerSocket server=new ServerSocket(12345); //Ch client kết ni đến

Socket client=server.accept();

10 //To InputStream OutputStream qua socket client // bt đầu gi nhn d liu…

}

catch(Exception e){ System.out.println(e); }

Lớp DatagramSocket

Sử dụng giao thức UDP, truyền nhận

liệu dạng gói tin.

Hàm tạo phương thức:

• DatagramSocket(): tạo đối tượng socket sử dụng giao thức • DatagramSocket(): tạo đối tượng socket sử dụng giao thức

UDP

• DatagramSocket(int port): tạo đối tượng socket kết nối đến số hiệu cổng port

• void send(DatagramPacket p): gửi gói tin p • void receive(DatagramPacket p): nhận gói tin p • void close(): đóng socket

Lớp DatagramPacket

Khai báo gói tin gửi mạng qua kết nối

DatagramSocket

Hàm tạo phương thức:

• DatagramPacket(byte buffer[], int len): tạo gói tin có liệu chứa buffer, chiều dài buffer len • DatagramPacket(byte buffer[], int len,

InetAddress dest, int port): tạo gói tin gửi đến địa dest với số hiệu cổng port

• InetAddess getAddress(): lấy địa chứa gói tin • int getPort(): lấy số hiệu cổng chứa gói tin • byte[] getData(): lấy liệu gói tin

(4)

Lớp DatagramSocket &

DatagramPacket(tt)-Ví dụ

try{

//To socket UDP kết ni vi cng 2345

DatagramSocket socket=new DatagramSocket(2345);

//Khai báo Buffer gi nhn

byte outBuffer[];

byte inBuffer[]=new byte[256];

//Khai báo Datagram Packet để gửi nhận DatagramPacket outDatagram;

13

DatagramPacket outDatagram;

DatagramPacket inDatagram=new DatagramPacket(inBuffer,inBuffer.length);

//Bt đầu gi nhn d liu … // nhn d liu:

socket.receive(inDatagram); // … x lý d liu inBuffer // chun b d liu outDatagram

// gi d liu:

socket.send(outDatagram);

//……

}

catch(Exception e){ System.out.println(e); }

Lớp URL

URL(Uniform Resource Locator): sử

dụng để định vị tài nguyên mạng.

Hàm tạo phương thức:

• URL(String s): tạo đối tượng URL từ địa s chuỗi

: lấy nội dung từ địa URL có

14 • Object getContent(): lấy nội dung từ địa URL có

được

• String getFile(): lấy tên tập tin nằm chuỗi địa URL

• String getHost(): lấy tên máy chủ • int getPort(): lấy số hiệu cổng

• InputStream openStream(): mở luồng để đọc thơng tin từ máy chủ

Lớp URL-Ví dụ

try{

//To URL kết ni đến trang web

URL url=new URL(“http://www.hcmutrans.edu.vn/index.htm“); //To lung nhp để đọc d liu

BufferReader inStream=new BufferReader(new InputStreamReader(url.openStream())); //In ni dung trang index.htm hình … //In ni dung trang index.htm hình …

String s;

while ((s=inStream.readLine())!=null){ System.out.println(s);

} }

catch(Exception e){ System.out.println(e); }

Sử dụng TCP socket

Server: tạo đối tượng ServerSocket lắng nghe đến số hiệu cổng

Client: tạo đối tượng Socket kết nối với server qua tên/địa IP số hiệu cổng server qua tên/địa IP số hiệu cổng

Tham khảo hai ví dụ:

TimeServer/TimeClient: server phục vụ truy vấn

ngày

CalServer/CalClient: Server phục vụ chức

(5)

Sử dụng UDP socket

Server: tạo đối tượng DatagramSocket lắng nghe đến số hiệu cổng

Client: tạo đối tượng DatagramSocket gửi liệu đến server qua địa

17

và gửi liệu đến server qua địa cổng biết trước Server gửi trả liệu qua địa cổng client chứa gói tin

Tham khảo ví dụ:

CurrencyServer/CurrencyClient: server phục vụ

truy vấn giá ngoại tệ

RMI kỹ thuật lập trình phân tán

đối tượng

Khái niệm lập trình phân tán đối

tượng

Thiết kế ứng dụng phân tán RMI

Vấn đề truyền tham số

18

Vấn đề truyền tham số

Kết nối mạng vấn đề tường

lửa(firewall)

SOAP

Khái niệm lập trình phân tán đối

tượng

Các đối tượng nằm phân tán máy vật lý khác

Đối tượng triệu gọi phương thức đối tượng nằm máy khác – triệu đối tượng nằm máy khác – triệu gọi từ xa

RMI (Remote method Invoke): cách thức giao tiếp đối tượng Java có mã lệnh cài đặt nằm máy khác triệu gọi lẫn

Khái niệm lập trình phân tán đối

tượng(tt)

Computer A

A1

A2

+ A1, A2 đối tượng máy A + B1 đối tượng máy B

+ C1,C2,C3 đối tượng máy C

Computer B

B1 A2

Computer C C1 C2

C3

(6)

B1 Tạo interface Calculator

Interface Calculator cần kế thừa lớp Remote để có

thể gọi từ xa

File Calculator.java có nội dung sau

import java.rmi.*;

25

import java.rmi.*;

public interface Calculator extends Remote{ public int sum(int n);

// sum = 1+2+3+…+n }

//Ch khai báo phương thc //đối s, khơng có ni dung.

B2 Tạo lớp CalculatorImpl

thực interface Calculator

File CalculatorImpl.java có nội dung:

import java.rmi.*;

public class CalculatorImpl implements Calculator{ public int sum(int n){

26 int s=0;

for (int i=1;i<n;i++) s=s+i;

return s; }

}

B3 Dịch thành file class, tạo

Stub & Skeleton

C:\>javac Calculator.java C:\>javac CalculatorImpl.java C:\>rmic CalculatorImpl

Kết trình dịch file:

Calculator.class

CalculatorImpl.class

CalculatorImpl_Stub.class

CalculatorImpl_Skel.class

B4 Xây dựng CalculatorServer.java

để cài đặt đối tượng Calculator

import java.rmi.server.*; import java.rmi.*;

public class CalculatorServer{

public static void main(String args[]){ try{

CalculatorImpl c=new CalculatorImpl(); CalculatorImpl c=new CalculatorImpl(); System.out.println("Exporting Calculator "); UnicastRemoteObject.exportObject(c);

Naming.bind("rmi://localhost/MyCalculator",c); System.out.println("Register Calculator!"); }catch(Exception e){

System.out.println(e); }

(7)

B5 Thực thi đăng ký đối tượng

rmiregistry.exe

Chức đăng ký đón nhận kết nối chứa thông tin đối tượng phương thức Naming.bind() gửi đến

Kích hoạt đăng ký:

29

Kích hoạt đăng ký:

C:\jsdk\bin\rmiregistry.exe

Kích hoạt CalculatorServer:

java CalculatorServer

B6 Xây dựng CalculatorClient.java

sử dụng đối tượng Calculator

import java.rmi.*;

public class CalculatorClient{

public static void main(String args[]){ try{

System.out.println("Finding Object ");

Calculator c=(Calculator)Naming.lookup("rmi://localhost/MyCalculator");

//Test c

30

//Test c

System.out.println("Sum(12)= " + c.sum(12)); }catch(Exception e){

System.out.println(e); }

} }

Triển khai ứng dụng

Trên Server cần file sau:

Calculator.class

CalculatorImpl.class

CalculatorImpl_Skel.class

CalculatorImpl_Stub.class

CalculatorServer.class

Trên Client cần file sau:

Calculator.class

CalculatorImpl_Stub.class

CalculatorClient.class

Truyền tham số lời gọi

phương thức từ xa

Tham số: tham trị tham biến

Tham số RMI:

Các kiểu liệu đơn giản như: int, char, float,… truyền theo tham trị

float,… truyền theo tham trị Các đối tượng muốn truyền qua mạng

phải cài đặt giao tiếp Remote

Serializable Đối tượng cài đặt Remote

Ngày đăng: 09/03/2021, 05:10

TỪ KHÓA LIÊN QUAN

w