1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Chương 5 LẬP TRÌNH MẠNG VỚI Java pdf

32 896 10
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 đề Lập Trình Mạng Với Java
Trường học Vietnam National University Ho Chi Minh City
Chuyên ngành Computer Science
Thể loại Giáo trình
Thành phố Ho Chi Minh City
Định dạng
Số trang 32
Dung lượng 239,74 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giới thiệu gói thư viện Java.net Một số lớp cần thiết trong gói thư viện java.net:  InetAddress: quản lý địa chỉ Internet  Socket: tạo kết nối từ client đến server  ServerSocket: tạo

Trang 1

Chương 5

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

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

Trang 3

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

 Một số lớp cần thiết trong gói thư viện

java.net:

InetAddress: quản lý địa chỉ 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

Trang 4

Lớp InetAddress

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

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

static InetAddress getLocalHost() : trả về đối tượng

InetAddress là địa chỉ của máy cục bộ(localhost).

static InetAddress getByName(String hostName):

trả về đối tượng InetAddress là địa chỉ của máy có tên là

trả về đối tượng InetAddress là địa chỉ của máy có tên là

hostName.

static InetAddress[] getAllByName(String

hostName): trả về tất cả các đối tượng InetAddress là địa chỉ của máy có tên là hostName.

byte[] getAddress(): trả về địa chỉ IP của đối tượng

InetAddress dưới dạng chuỗi byte.

string getHostAddress(): trả về địa chỉ IP của đối tượng

Trang 5

catch( UnknownHostException e){

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

}

Trang 6

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 và kết nối đến server hostName ở số hiệu cổng port.

• Socket(InetAddress address,int port): tạo đối

tượng socket kết nối đến address và port.

• Socket(String hostName, int port, boolean

stream): tạo đối tượng socket kết nối đến hostName và

port, stream=true nếu qui định kết nối theo TCP, stream=false nếu qui định kết nối theo UDP Tuy nhiên nếu sử dụng socket theo UDP thì nên sử dụng lớp DatagramSocket.

Trang 7

Lớp Socket(tt)

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

InputStream getInputStream() : lấy luồng

nhập để có thể nhận dữ liệu từ máy ở xa.

OutputStream getOutputStream(): lấy luồng

xuất để có thể gửi dữ liệu đến máy ở xa.

xuất để có thể gửi dữ liệu đến máy ở xa.

InetAddress getInetAddress(): trả về đối

tượng InetAddress chứa địa chỉ của máy đang kết nối đến.

int getPort(): trả về số hiệu cổng sử dụng của

máy đang kết nối.

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

Trang 8

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

try{

//Kết nối đến máy chủ

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

//Luồng nhâp để nhận dữ liệu

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

//Luồng xuất để gửi dữ liệu

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

//Bắt đầu gửi nhận dữ liệu qua inStream và outStream …

}

catch(Exception e){

System.out.println(e);

}

Trang 9

Lớp ServerSocket

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

nghe kết nối trên một port

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

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

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

nghe ở port.

• Socket accept(): dừng lại và đợi client kết nối đến, khi

nhận được thông tin kết nối sẽ trả về đối tượng Socket kết nối với client.

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

Trang 10

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

try{

//Tạo serverSocket lắng nghe ở cổng 12345

ServerSocket server=new ServerSocket(12345);

//Chờ client kết nối đến

Socket client=server.accept();

//Tạo InputStream và OutputStream qua socket client

// và bắt đầu gửi nhận dữ liệu…

}

catch(Exception e){

System.out.println(e);

}

Trang 11

Lớp DatagramSocket

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

liệu dưới dạng gói tin.

 Hàm tạo và các 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 và kết

nối đến số hiệu cổng port.

• void send(DatagramPacket p): gửi gói tin p đi.

• void receive(DatagramPacket p): nhận gói tin p về.

• void close(): đóng socket.

Trang 12

Lớp DatagramPacket

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

DatagramSocket.

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

• DatagramPacket(byte buffer[], int len): tạo gói tin

• DatagramPacket(byte buffer[], int len,

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

• InetAddess getAddress(): lấy địa chỉ chứa trong gói tin.

• int getPort(): lấy số hiệu cổng chứa trong gói tin.

• byte[] getData(): lấy dữ liệu trong gói tin.

• int getLength(): lấy chiều dài gói dữ liệu.

Trang 13

Lớp DatagramSocket &

DatagramPacket(tt)-Ví dụ

try{

//Tạo socket UDP kết nối với cổng 2345

DatagramSocket socket=new DatagramSocket(2345);

//Khai báo Buffer gửi nhận

byte outBuffer[];

byte inBuffer[]=new byte[256];

//Khai báo Datagram Packet để gửi và nhận

DatagramPacket outDatagram;

DatagramPacket outDatagram;

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

//Bắt đầu gửi nhận dữ liệu …

// nhận dữ liệu:

socket.receive(inDatagram); // … xử lý dữ liệu ở inBuffer

// chuẩn bị dữ liệu trong outDatagram

Trang 14

Lớp URL

 URL(Uniform Resource Locator): sử

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

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

• URL(String s): tạo đối tượng URL từ địa chỉ s là một chuỗi.

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

được.

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

chỉ 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ừ

Trang 15

Lớp URL-Ví dụ

try{

//Tạo URL kết nối đến trang web

URL url=new URL(“http://www.hcmutrans.edu.vn/index.htm“);

//Tạo luồng nhập để đọc dữ liệu

BufferReader inStream=new BufferReader(new

InputStreamReader(url.openStream()));

//In nội dung trang index.htm ra màn hình …

//In nội dung trang index.htm ra màn hình …

Trang 16

Sử dụng TCP socket

 Server: tạo một đối tượng ServerSocket

lắng nghe đến một số hiệu cổng nào đó

 Client: tạo một đối tượng Socket kết nối với

server qua tên/địa chỉ IP và số hiệu cổng

server qua tên/địa chỉ IP và số hiệu cổng

 Tham khảo hai ví dụ:

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

ngày giờ.

 CalServer/CalClient: Server phục vụ chức năng

tính toán.

Trang 17

Sử dụng UDP socket

 Server: tạo một đối tượng DatagramSocket

lắng nghe đến một số hiệu cổng nào đó

 Client: tạo một đối tượng DatagramSocket

và gửi dữ liệu đến server qua địa chỉ và

và gửi dữ liệu đến server qua địa chỉ và

cổng đã được biết trước 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ụ:

 CurrencyServer/CurrencyClient: server phục vụ

Trang 18

RMI và 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

Trang 19

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 trên các máy

vật lý khác nhau

 Đối tượng có thể triệu gọi phương thức của

đối tượng nằm trên một máy khác – triệu

đối tượng nằm trên một máy khác – triệu gọi từ xa

 RMI (Remote method Invoke): là cách thức

giao tiếp của các đối tượng Java có mã lệnh cài đặt nằm trên các máy khác nhau có thể triệu gọi lẫn nhau

Trang 20

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

tượng(tt)

Computer A A1

A2

+ A1, A2 là các đối tượng trên máy A + B1 là đối tượng trên máy B

+ C1,C2,C3 là các đối tượng trên máy C

Trang 21

Gọi phương thức từ xa và các vấn

đề phát sinh

 Các đối tượng nằm trên các máy khác

nhau, có không gian địa chỉ khác nhau nên việc tham chiếu biến hay địa chỉ là khác

nhau

 Ví dụ khi truyền tham số là con trỏ cho một

phương thức gọi từ xa, ở máy này con trỏ tồn

phương thức gọi từ xa, ở máy này con trỏ tồn tại, nhưng ở máy ở xa, có thể chưa có vùng nhớ nào đã cấp phát dành cho con trỏ này.

 Lời gọi phương thức cục bộ luôn trả về kết

quả, trong khi gọi phương thức từ xa thông qua kết nối mạng và có thể bị ngắt ngang

do mạng có sự cố

Trang 22

Lớp trung gian: Stub & Skeleton

 Để giải quyết vấn đề trên, Java không

cho phép gọi phương thức từ xa trực tiếp mà thông qua lớp trung gian

 Lớp trung gian tồn tại ở cả máy gọi

 Lớp trung gian tồn tại ở cả máy gọi

và máy được gọi.

Máy gọi cần lớp trung gian là Stub

 Máy được gọi cần lớp trung gian là

Skeleton

Trang 23

Stub & Skeleton

Trang 24

Xây dựng ứng dụng phân tán RMI

 Ví dụ xây dựng ứng dụng CalculatorServer/Client

 Calculator: lớp có phương thức sẽ được gọi từ xa.

 CalculatorClient: lớp sử dụng các phương thức của

Calculator

 CalculatorServer: lớp sẽ đăng ký Calculator để có thể

gọi từ xa gọi từ xa

Trang 25

B1 Tạo interface Calculator

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

thể gọi được từ xa

 File Calculator.java có nội dung như sau

import java.rmi.*;

import java.rmi.*;

public interface Calculator extends Remote{

public int sum(int n);

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

}

//Chỉ khai báo các phương thức và

Trang 26

B2 Tạo lớp CalculatorImpl hiện

thực interface Calculator

 File CalculatorImpl.java có nội dung:

import java.rmi.*;

public class CalculatorImpl implements Calculator{

public int sum(int n){

Trang 27

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

Stub & Skeleton

Trang 28

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

Trang 29

B5 Thực thi bộ đăng ký đối tượng rmiregistry.exe

 Chức năng của bộ đăng ký là đón nhận các

kết nối chứa thông tin về đối tượng do

phương thức Naming.bind() gửi đến

Trang 30

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[]){

}

Trang 32

Truyền tham số trong các lời gọi

phương thức từ xa

 Tham số: tham trị và tham biến

 Tham số trong RMI:

 Các kiểu dữ liệu đơn giản như: int, char,

float,… được truyền theo tham trị.

float,… được 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 hoặc

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

sẽ truyền tham biến, cài đặt theo Serializable truyền theo tham trị

Ngày đăng: 24/12/2013, 18:15

TỪ KHÓA LIÊN QUAN

w