1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lập trình mạng 8 java udp

35 985 5
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

Định dạng
Số trang 35
Dung lượng 669,64 KB

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

Nội dung

UDP sử dụng các cổng để ánh xạ dữ liệu đến vào một tiến trình cụ thể đang chạy trên một máy tính. Có 3 loại cổngCác cổng phổ biến: Từ 0 đến 1023 Các cổng đã đăng ký: 1024 đến 49151 Các cổng độngdành riêng 49152 đến 65535

Trang 4

 Thiếu các tín hiệu bắt tay

◦ UDP không đảm bảo việc dữ liệu đã đến đích hay chưa

 Không sử dụng các phiên (phi liên kết)

 Thiếu bảo mật

 Thiếu kiểm soát luồng

Nhược điểm của UDP so với TCP

Trang 5

 Không cần thiết lập liên kết:

◦ nên có thể tránh được thời gian trễ (dùng trong DNS)

 Kích thước header UDP chỉ có 8 byte header

cho mỗi đoạn (TCP 24 byte), ref

◦ vì vậy sử dụng băng thông ít hơn Tốc độ nhanh hơn

 Hỗ trợ liên kết 1-1, 1-n

◦ Sử dụng cho các phương thức truyền broadcasting

và multicasting khi chúng ta muốn truyền tin với nhiều host

Ưu điểm của UDP

Trang 6

 Nên sử dụng UDP khi:

◦ Không cần thiết lập liên kết

◦ Sử dụng cho các phương thức truyền broadcasting và

multicasting khi chúng ta muốn truyền tin với nhiều host

◦ Kích thước datagram nhỏ và trình tự đoạn là không quan trọng

◦ Ứng dụng không gửi các dữ liệu quan trọng

◦ Không cần truyền lại các gói tin

◦ Băng thông của mạng đóng vai trò quan trọng

 Có một số ứng dụng quan trọng dùng UDP, bao gồm

DNS , SNMP , DHCP và RIP

Ứng dụng của UDP

Trang 7

 Hai lớp là DatagramPacket và DatagramSocket.

 DatagramPacket : đóng gói các byte dữ liệu vào các gói tin UDP (datagram) và cho phép mở các datagram khi nhận

◦ Nhận dữ liệu: nhận một đối tượng DatagramPacket từ

DatagramSocket và sau đó đọc nội dung của gói tin.

(Khác với TCP: Stream UDP: xử lý từng packet)

Cài đặt ứng dụng UDP trong Java

Trang 8

 Dùng cho một gói dữ liệu đi trên mạng theo kết nối DatagramSocket

 Một gói có thể chứa các thông tin:

◦ các địa chỉ nguồn, đích từ header IP,

 Các trường thông tin còn lại không thể truy nhập được

từ mã Java thuần túy.

DatagramPacket class

8

Trang 9

◦ public DatagramPackage( byte buff[],

int len )

◦ public DatagramPackage ( byte buff[],

int offset, int len ) Khi một socket nhận một datagram, nó chứa datagram trong bộ đệm buff[]và chiều dài gói dữ liệu là len, bắt đầu từ vị trí offset

Khởi tạo datagram để nhận

9

Trang 10

public DatagramPacket (byte[] b, int length, InetAddress host, int port)

public DatagramPacket (byte[] b, int length, SocketAddress host , int

port)

◦ Host: host ở xa xác định bởi InetAddress hoặc

SocketAddress

◦ Port: số hiệu port của host

◦ Length: Chiều dài byte của datagram

◦ Offset: vị trí bắt đầu

Khởi tạo datagram để gửi

int offset

Trang 11

public InetAddress getAddress()

trả về một đối tượng InetAddress chứa địa chỉ IP của host ở xa.

public int getPort()

trả về số cổng của host mà đã gửi datagram đi

public SocketAddress()

trả về một đối tượng SocketAddress chứa địa chỉ

IP và số hiệu cổng của host ở xa

public byte[] getData()

trả về một mảng byte chứa dữ liệu từ datagram

Nhận các thông tin từ DatagramPacket

Trang 12

public int getLength()

trả về số bytes dữ liệu có trong một datagram

public getOffset() trả về vị trí trong mảng được trả về

bởi phương thức getData()

public String(byte[] buffer,String encoding)

chuyển đổi mảng byte thành một đối tượng String có cách thức

mã hóa encoding

ex, dp được nhận từ mạng, chuyển thành xâu ký tự :

String s=new String(dp.getData(),”ASCII”);

public ByteArrayInputStream(byte[] b, int

offset, int length) chuyển đổi mảng byte (sử dụng

như là một luồng nhập InputStream) được trả về bởi phương thức getData() thành luồng ByteArrayInputStream

Nhận các thông tin từ DatagramPacket

Trang 13

public void setAddress(InetAddress dc)

thay đổi địa chỉ của máy mà ta sẽ gửi gói tin tới

public void setPort(int port)

thay đổi số hiệu cổng gửi tới của gói tin

public void setLength(int length)

thay đổi số byte dữ liệu có thể đặt trong vùng đệm

public void setData(byte[] b):

thay đổi dữ liệu của datagram

public void setData(byte[] b, int offset, int length)

để gửi một khối lượng dữ liệu lớn Thay vì gửi toàn bộ dữ liệu trong mảng, ta có thể gửi dữ liệu trong từng đoạn của mảng tại mỗi thời điểm

thay đổi thông tin của datagram

Trang 14

 DatagramSocket class: Dùng để gửi /nhận đi 1 gói dữ liệu DatagramPacket theo UDP

public class DatagramSocket extends Object

 Tất cả các datagram được gắn với một cổng cục bộ - được

sử dụng để lắng nghe các datagram đến hoặc được đặt trên các header của các datagram sẽ gửi đi

 Cung cấp các phương thức:

◦ để gửi và nhận các gói tin,

◦ cũng như xác định một giá trị timeout khi sử dụng phương pháp vào ra không phong tỏa (non blocking I/O),

◦ kiểm tra và sửa đổi kích thước tối đa của gói tin UDP,

DatagramSocket class

14

Trang 15

 Constructors:

Khởi tạo một socket UDP và chấp nhận nó trên port còn trống của local host

SocketException

Khởi tạo một socket UDP và chấp nhận nó trên port xác định của local host

laddr) throws SocketException

Khởi tạo một socket UDP với đ/c cục bộ và port xác định

Khởi tạo DatagramSocket

15

Trang 16

void connect(InetAddress address, int port) :

kết nối socket đến đ/c từ xa

void receive(DatagramPacket dp) throws IOException :

nhận 1 gói tin UDP và lưu nội dung trong packet xác định

void send(DatagramSocket dp) throws IOException :

gửi một gói tin

DatagramSocket class: Methods

16

Trang 17

InetAddress getInetAddress():

trả về địa chỉ remote mà socket kết nối tới, hoặc giá trị null nếu không tồn tại liên kết

InetAddress getLocalAddress() : trả về địa chỉ cục bộ

Int getSoTimeOut()

trả về giá trị timeout của socket

void setSoTimeOut(int timeout):

thiết lập timeout

void close():

đóng một liên kết và g.phóng nó khỏi cổng cục bộ

void disconnect(): ngắt kết nối socket

DatagramSocket class: Methods

17

Trang 18

Quá trình gửi gói tin UDP

Trang 19

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

public class Sending {

public static void main(String[] argv) throws Exception {

Trang 20

Quá trình nhận gói tin UDP

Trang 21

Ex, Quá trình nhận gói tin UDP

s import java.net.DatagramPacket;

import java.net.DatagramSocket;

public class Receving {

public static void main(String[] argv) throws Exception {

byte [] inbuf = new byte [256]; // default size

DatagramSocket socket = new DatagramSocket();

DatagramPacket packet = new DatagramPacket(inbuf,

inbuf length );

socket.receive(packet);

int numBytesReceived = packet.getLength();

System out println(numBytesReceived);

}

}

Trang 22

 Data là text

Ứng dụng xử lý gói tin nhận được

DataInputStream

BufferedReader

Trang 23

Tương tác client/server qua UDP socket

23

Trang 24

Cấu trúc chuơng trình client

Trang 25

Cấu trúc chuơng trình server

Trang 26

1) client đọc các dòng văn bản do người dùng

gõ từ bàn phím, gửi tới server qua socket 2) server đọc các dòng gửi từ socket

3) server chuyển sang chữ hoa và gửi trả lại cho client

4) client đọc và in lại dòng văn bản nhận được

từ socket

Ex: viết ứng dụng client/ server bằng UDP Socket

26

Trang 27

class UDPClient2 {

public static void main(String args[]) throws Exception {

// Create InputStream from keyboard

BufferedReader inStr = new BufferedReader( new

InputStreamReader(System. in ));

String str = inStr.readLine();

// Create client socket, connect to server

DatagramSocket clientSk = new DatagramSocket();

//Translate hostname to IP

InetAddress IPAddress =

InetAddress.getByName( "localhost" );

// Define data to send and receive

byte [] seData = new byte [1024];

byte [] reData = new byte [1024];

seData = str.getBytes();

UDP client

27

Trang 28

UDP Client

28

// Create datagram with data to send from this socket to server

DatagramPacket sePacket = new DatagramPacket(seData, seData length , IPAddress, 9876);

//sending

clientSk.send(sePacket);

// Create datagram for receive from server

DatagramPacket rePacket = new DatagramPacket(reData, reData length );

//receiving data from socket

clientSk.receive(rePacket);

//get data in String

String modiStr = new String(rePacket.getData());

System out println( "FROM SERVER:" + modiStr);

clientSk.close();

} }

Trang 29

class UDPServer2 {

public static void main(String args[]) throws Exception {

//Create socket at 9876

DatagramSocket serverSk = new DatagramSocket(9876);

//Define data to send and receive

byte [] reData = new byte [1024];

byte [] seData = new byte [1024];

System out println( "Waiting request from client " );

while ( true ) {

// Create space datagram for receive from client

DatagramPacket rePacket = new DatagramPacket(reData, reData length );

//receiving

serverSk.receive(rePacket);

// get data in String

String sentence = new String(rePacket.getData());

UDP Server

29

Trang 30

UDP Server

30

// get infor Ip, port of client

InetAddress IPAddress = rePacket.getAddress();

int port = rePacket.getPort();

//process

String capSentence = sentence.toUpperCase();

seData = capSentence.getBytes();

//Create datagram with data to send from this socket to

DatagramPacket sePacket = new DatagramPacket(seData, seData length , IPAddress, port);

//sending

serverSk.send(sePacket);

System out println( "Done!!!!" );

} } }

Trang 31

output

Trang 32

 Cắt 5 ký tự đầu của chuỗi:

Ex, Using GUI in UDP Socket

Trang 33

Đa tuyến hay được ứng dụng trong các chương trình Server:

 Tạo socket và đăng ký với hệ thống

 Lặp công việc nhận dữ liệu từ client, đối với một dữ liệu nhận:

◦ tạo mới một process để xử lý

◦ Tiếp tục nhận dữ liệu mới từ client

 Công việc của process mới:

◦ Nhận thông tin của process cha chuyển đến, lấy thông tin socket

◦ Xử lý và gửi thông tin về cho client theo giao thức lớp ứng dụng đã thiết kế

◦ Kết thúc

MultiThread trong các chương trình Server

33

Trang 34

 Thread_UDPServer

Ex, MultiThread in Server UDP Socket

Trang 35

TCP/UDP Header

Ngày đăng: 08/07/2014, 01:08

TỪ KHÓA LIÊN QUAN

w