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

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

Đ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

Định dạng
Số trang 45
Dung lượng 4,67 MB

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

Nội dung

 Điểm giao tiếp giữa máy tính và mạng  Được dùng để gửi và nhận dữ liệu  Được hỗ trợ bỡi nhiều hệ thống và ngôn ngữ lập trình  Phân loại: Server passive socket, client active socke

Trang 1

Lý thuyết: 45 tiết

Thực hành: 30 tiết

Trang 3

UDP Socket Programming

Trang 4

Các khái niệm liên quan đến lập trình mạng:

Trang 5

Các khái niệm liên quan đến lập trình mạng:

Trang 6

Mạng máy tính:

 Mạng máy tính là tập hợp các máy tính hoặc các thiết bị được nối với nhau bởi các đường truyền vật lý và theo một kiến trúc nào đó

Trang 7

Mạng máy tính:

Application (http,ftp,telnet,…)

Transport (TCP, UDP, )

Network (IP, )

Link (device driver, )

Trang 8

Mạng máy tính:

Application (http,ftp,telnet,…)

Transport (TCP, UDP, )

Network (IP, )

Link (device driver, )

UDP (User Datagram Protocol) là giao thức vận

chuyển phi kết nối thực hiện gửi các packets gọi là datagrams từ máy này sang máy khác

Ví dụ:

 Clock server

 Ping

Trang 9

port# data Data

Packet

Trang 10

Ports:

 Port là 1 con số nguyên

 Một số port đã được dành riêng cho các dịch vụ mạng phổ biến:

Trang 11

socket socket

Internet address = 138.37.88.249 Internet address = 138.37.94.248

other ports

Trang 13

 Điểm giao tiếp giữa máy tính và mạng

 Được dùng để gửi và nhận dữ liệu

 Được hỗ trợ bỡi nhiều hệ thống và ngôn ngữ lập trình

 Phân loại: Server (passive) socket, client (active) socket và UDP socket

logical connection sockets (end points)

Trang 14

 Gói java.net chứa tất cả các lớp cần thiết cho việc lập

trình mạng (Java Sockets Programming)

Trang 15

Lớp InetAddress:

Công dụng:

 Biểu diễn một địa chỉ Internet, các địa chỉ IP trong một ứng dụng mạng sử

dụng Java

 Lớp này được sử dụng bởi hầu hết các lớp mạng, bao gồm Socket,

ServerSocket, URL, DatagramSocket, DatagramPacket,…

Trang 16

Ví dụ: viết chương trình truy xuất địa chỉ IP

import java.net.InetAddress;

import java.net.UnknownHostException;

public class net_lookup {

public static void main(String[] args) {

Trang 17

Các đối tượng cơ bản trong lập trình mạng TCP Socket

Trang 18

Tạo và sử dụng Server Socket

Trang 19

Ví dụ: tạo ServerSocket

try {

ServerSocket server = new ServerSocket (8888);

while (true) {

Socket incoming = server.accept(); // obtain a client socket

// handle client request by reading from and writing to the

Trang 20

Tạo và sử dụng Client Socket

 accept() của lớp ServerSocket

khởi tạo đối tượng

 Methods

getInputStream() trả về InputStream để nhận dữ liệu

getOutputStream() trả về OutputStream để gửi dữ liệu

Trang 21

Mô hình truyền / nhận dữ liệu giữa Server và Client:

ServerSocket(1234)

Socket(“128.250.25.158”, 1234)

Output/write stream Input/read stream

Client

Server

Trang 22

Ví dụ 1: viết chương trình cho server nhận thông tin là một chuỗi

ký tự từ phía client gởi lên và chuyển đổi chuỗi này sang chữ hoa

và gởi trả về lại cho phía client dùng phương thức TCP Socket

Server (running on hostid)

create socket, port=x, for incoming request:

welcomeSocket = ServerSocket()

read request from connectionSocket

write reply to connectionSocket

Client

wait for incoming connection request

connectionSocket = welcomeSocket.accept() create socket,connect to hostid, port=x clientSocket = Socket()

send request clientSocket

read reply from clientSocket

TCP connection setup

Trang 23

import java.io.*; import java.net.*;

public class tcp_myserver{

public static void main(String args[])

{ try{ //1 creating a server socket

ServerSocket sk = new ServerSocket(6789,10);

//2 Wait for connection

System.out.println("Waiting for connection");

Socket s = sk.accept();

System.out.println("Connection received from " + s.getInetAddress().getHostName());

//3 get Input and Output streams

PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));

<< XỬ LÝ DATA NHẬN ĐƯỢC TỪ CLIENT VA TRUYỀN LAI CHO CLIENT>>

Trang 24

import java.io.*; import java.net.*;

public class tcp_myserver{

public static void main(String args[])

{ try{ //1 creating a server socket

ServerSocket sk = new ServerSocket(6789,10);

//2 Wait for connection

System.out.println("Waiting for connection");

Socket s = sk.accept();

System.out.println("Connection received from " + s.getInetAddress().getHostName());

//3 get Input and Output streams

PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));

<< XỬ LÝ DATA NHẬN ĐƯỢC TỪ CLIENT VA TRUYỀN LAI CHO CLIENT>>

Trang 25

import java.io.*; import java.net.*;

public class tcp_myclient{

public static void main(String args[])

{try{ //1 creating a socket to connect to the server

Socket s = new Socket("localhost", 6789);

System.out.println("Connected to localhost in port 6789");

//2 get Input and Output streams

PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));

//3: Communicating with the server

<< XỬ LÝ DATA NHẬN ĐƯỢC TỪ SERVER VA TRUYỀN LAI CHO SERVER>>

Trang 26

import java.io.*; import java.net.*;

public class tcp_myclient{

public static void main(String args[])

{try{ //1 creating a socket to connect to the server

Socket s = new Socket("localhost", 6789);

System.out.println("Connected to localhost in port 6789");

//2 get Input and Output streams

PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));

//3: Communicating with the server

<< XỬ LÝ DATA NHẬN ĐƯỢC TỪ SERVER VA TRUYỀN LAI CHO SERVER>>

Trang 27

UDP

 Phi kết nối và không tin cậy

 Không đảm bảo bảo toàn dữ liệu

Socket Programming với UDP

 Không cần socket làm server

 Không có luồng dữ liệu gắn vào các socket

 sending hosts đóng gói dữ liệu, IP và port thành packet rồi gửi lên mạng

 receiving host nhận packet và rút trích ra thông tin

Các lớp cơ bản lập trình UDP

DatagramSocket: tạo kết nối mạng

DatagramPacket: để đóng gói datagram thành packet truyển trên mạng

dùng để nhận và gửi (Chứa nội dung cần gửi và địa chỉ máy gửi, port)

Trang 29

Type Description

 Constructors

DatagramPacket( byte[] buf, int len); nhận dữ liệu

DatagramPacket( byte[] buf, int len, InetAddress a, int port); gởi dữ liệu

 Methods

byte[] getData();

void setData(byte[] buf);

void setAddress(InetAddress a);

void setPort(int port);

InetAddress getAddress();

int getPort();

Trang 30

Ví dụ 1: viết chương trình cho server nhận thông tin là một chuỗi

ký tự từ phía client gởi lên và chuyển đổi chuỗi này sang chữ hoa

và gởi trả về lại cho phía client dùng phương thức UDP Socket

Trang 31

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];

// 1 Khởi tạo đối tượng

DatagramSocket serverSocket = new DatagramSocket(9876);

System.out.println("Dang cho ket noi tu client");

// 2 Nhận dữ 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("<Client>: " + sentence);

<< XỬ LÝ DỮ LIỆU ĐÃ NHẬN >>

// 3 Gởi dữ liệu về client

InetAddress IPAddress = receivePacket.getAddress();

int port = receivePacket.getPort();

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);

serverSocket.send(sendPacket);

serverSocket.close();}}

UDP_MYSERVER.JAVA

Trang 32

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];

// 1 Khởi tạo đối tượng

DatagramSocket serverSocket = new DatagramSocket(9876);

System.out.println("Dang cho ket noi tu client");

// 2 Nhận dữ 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("<Client>: " + sentence);

<< XỬ LÝ DỮ LIỆU ĐÃ NHẬN >>

// 3 Gởi dữ liệu về client

InetAddress IPAddress = receivePacket.getAddress();

int port = receivePacket.getPort();

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);

Trang 33

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];

// 1 Khởi tạo đối tượng

DatagramSocket clientSocket = newDatagramSocket(9876);

InetAddress IPAddress = InetAddress.getByName("localhost");

// 2 Gởi dữ liệu đến server

BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

System.out.print("<Client>: "); String sentence = inFromUser.readLine();

sendData = sentence.getBytes();

DatagramPacket sendPacket = newDatagramPacket(sendData, sendData.length, IPAddress, 9876);

clientSocket.send(sendPacket);

// 3 Nhận dữ liệu gởi về từ server

DatagramPacket receivePacket = newDatagramPacket(receiveData, receiveData.length);

Trang 34

RMI vs Socket programming:

 Với socket programming, phải tự tạo kết nối và quản lý quá trình truyền nhận dữ liệu

đối tượng trên máy khác (remote objects) giống như là đang chạy trên cùng 1 máy

Trang 35

RMI

System

Client JVM Server JVM

JAVA PROGRAM

REMOTE OBJECT

REMOTE METHOD INVOCATION

Trang 36

Local và Remote Objects:

java.rmi.Remote

instanceof, etc)

Trang 37

Định vị Remote Objects:

thông qua giao thức rmi, e.g., rmi://host:port/name

Method Description bind(name, obj) Bind obj to name rebind(name, obj) Bind obj to name even if already bound unbind(name) Remove the binding

lookup(url) Return object bound to url list(url) Return a list of all bindings

Trang 38

Thi hành một phương thức trong RMI

marshalling unmarshalling

Phương thức gọi thi hành có dạng sau:

boolean somemethod(object x, object y)

Trang 39

RMI – Các bước thực hiện (1)

đựợc gọi từ xa của đối tượng

được khai báo

ra các lớp tương ứng và stub cho client, skeleton cho server

Trang 40

Ví dụ 1: viết chương trình cho phép client thực hiện gọi các phương thức từ xa ở phía server để chuyển đổi một chuỗi chữ thường sang một chuỗi chữ hoa và in ra dùng phương thức RMI

Bước 1: Tạo giao diện (interface) MessageInterface khai báo các phương thức đựợc gọi từ xa của đối tượng

import java.rmi.*;

public interface MessageInterface extends Remote {

String receiveMessage( String message) throws RemoteException ;

void printMessageAtServer( String message) throws RemoteException ;

}

MessageInterface.JAVA

Trang 41

Các bước thực hiện :

Bước 2+3: cài đặt (class implement) cho giao diện MessageInterface đã được khai báo và viết chương trình Server

Trang 42

Các bước thực hiện :

Bước 2+3: cài đặt (class implement) cho giao diện MessageInterface đã được khai báo và viết chương trình Server

import java.rmi.*;import java.rmi.registry.*;

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

public class rmi_server extends java.rmi.server.UnicastRemoteObject implements

MessageInterface {

<< Cài đặt (class implement) cho giao diện MessageInterface >>

public rmi_server() throws RemoteException {

try{ address = (InetAddress.getLocalHost()).toString();}

catch( Exception e){ System.out.println("can't get inet address.");}

public static void main(String args[]){

try{ rmi_server server = new rmi_server();}

catch (Exception e){e.printStackTrace();System.exit(1);

RMI_MYSERVER.JAVA

Trang 43

Các bước thực hiện :

Bước 2+3: cài đặt (class implement) cho giao diện MessageInterface đã được khai báo và viết chương trình Server

import java.rmi.*;import java.rmi.registry.*;

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

public class rmi_server extends java.rmi.server.UnicastRemoteObject implements

MessageInterface {

<< Cài đặt (class implement) cho giao diện MessageInterface >>

public rmi_server() throws RemoteException {

try{ address = (InetAddress.getLocalHost()).toString();}

catch( Exception e){ System.out.println("can't get inet address.");}

public static void main(String args[]){

try{ rmi_server server = new rmi_server();}

catch (Exception e){e.printStackTrace();System.exit(1);

}

Trang 44

public class rmi_client {

public static void main(String[] args) {

MessageInterface rmiServer;

int serverPort = 6789;

System.out.println("sending " + text + " to " +serverAddress + ":" + serverPort);

catch(RemoteException e){e.printStackTrace();}

catch(NotBoundException e){System.err.println(e);}

}}

RMI_MYCLIENT.JAVA

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

🧩 Sản phẩm bạn có thể quan tâm

w