Tải bản đầy đủ (.pptx) (35 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (749.81 KB, 35 trang )

Chapter 7
L p trình m ng v i Javaậ ạ ớ
L p trình ng d ng cho ậ ứ ụ
UDP
GV: Nguyễn Thị Thanh Vân - CNTT
1
Java Simplified / Session 22 / 2 of 45

Giao thức UDP:

là giao thức đơn giản,

phi liên kết và

cung cấp dịch vụ trên tầng giao vận với tốc độ
nhanh.

Nó hỗ trợ liên kết một-nhiều
Giao thức UDP
Java Simplified / Session 22 / 3 of 45

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ổng

Các cổng phổ biến: Từ 0 đến 1023

Các cổng đã đăng ký: 1024 đến 49151


Các cổng động/dành riêng 49152 đến 65535
Port UDP
Java Simplified / Session 22 / 4 of 45

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
Java Simplified / Session 22 / 5 of 45

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
Java Simplified / Session 22 / 6 of 45

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
Java Simplified / Session 22 / 7 of 45

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
được.

DatagramSocket: thực hiện cả hai nhiệm vụ nhận và gửi

gói tin:
◦ Gửi dữ liệu: đặt dữ liệu trong một DatagramPacket và gửi gói tin
bằng cách sử dụng DatagramSocket.
◦ 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
Java Simplified / Session 22 / 8 of 45

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ổng nguồn và đích,

độ dài dữ liệu.
public final class DatagramPacket extends
Object

Lớp này cung cấp các phương thức để nhận và thiết lập
các thông tin trên

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
Java Simplified / Session 22 / 9 of 45


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
Java Simplified / Session 22 / 10 of 45

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
Java Simplified / Session 22 / 11 of 45


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
Java Simplified / Session 22 / 12 of 45

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
Java Simplified / Session 22 / 13 of 45

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
Java Simplified / Session 22 / 14 of 45

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,

đóng socket.
DatagramSocket class
14
Java Simplified / Session 22 / 15 of 45

Constructors:
◦ Public DatagramSocket() throw SocketException
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

Public DatagramSocket(int port) throw
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

public DatagramSocket(int port, InetAddress
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
Java Simplified / Session 22 / 16 of 45

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
Java Simplified / Session 22 / 17 of 45

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
Java Simplified / Session 22 / 18 of 45
Quá trình gửi gói tin UDP
Java Simplified / Session 22 / 19 of 45
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Sending {
public static void main(String[] argv) throws Exception {
InetAddress dst = InetAddress.getLocalHost();
int port = 8080;
byte[] outbuf = new byte[1024];
int len = 1024;
DatagramPacket request = new DatagramPacket(outbuf, len,
dst, port);
DatagramSocket socket = new DatagramSocket();
socket.send(request);
}
}
Ex, Quá trình gửi gói tin UDP
Java Simplified / Session 22 / 20 of 45
Quá trình nhận gói tin UDP

Java Simplified / Session 22 / 21 of 45
Ex, Quá trình nhận gói tin UDP
simport 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);
}
}
Java Simplified / Session 22 / 22 of 45

Data là text
Ứng dụng xử lý gói tin nhận được
DataInputStream
BufferedReader
Java Simplified / Session 22 / 23 of 45
Tương tác client/server qua UDP socket
23
Java Simplified / Session 22 / 24 of 45
Cấu trúc chuơng trình client
Java Simplified / Session 22 / 25 of 45
Cấu trúc chuơng trình server

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×