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
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 [...]... 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 Java Simplified / Session 22 / 17 of 45 Quá trình gửi gói tin UDP Java Simplified / Session 22 / 18 of 45 Ex, Quá trình gửi gói tin UDP import java. net.DatagramPacket; import java. net.DatagramSocket; import java. net.InetAddress; public class Sending... InetAddress.getLocalHost(); int port = 80 80; byte[] outbuf = new byte[1024]; int len = 1024; DatagramPacket request = new DatagramPacket(outbuf, len, dst, port); DatagramSocket socket = new DatagramSocket(); socket.send(request); } } Java Simplified / Session 22 / 19 of 45 Quá trình nhận gói tin UDP Java Simplified / Session 22 / 20 of 45 Ex, Quá trình nhận gói tin UDP simport java. net.DatagramPacket; import java. net.DatagramSocket;... System.out.println(numBytesReceived); } } Java Simplified / Session 22 / 21 of 45 Ứng dụng xử lý gói tin nhận được Data là text DataInputStream BufferedReader Java Simplified / Session 22 / 22 of 45 Tương tác client/server qua UDP socket Java Simplified / Session 22 / 23 of 45 Cấu trúc chuơng trình client Java Simplified / Session 22 / 24 of 45 Cấu trúc chuơng trình server Java Simplified / Session 22 / 25... gửi thông tin về cho client theo giao thức lớp ứng dụng đã thiết kế ◦ Kết thúc Java Simplified / Session 22 / 33 of 45 Ex, MultiThread in Server UDP Socket Thread_UDPServer UDPServer extends Thread Thread_UDPClient SeThread extends Thread ReThread extends Thread Java Simplified / Session 22 / 34 of 45 TCP /UDP Header Java Simplified / Session 22 / 35 of 45 ... //sending serverSk.send(sePacket); System.out.println("Done!!!!"); } } } Java Simplified / Session 22 / 30 of 45 output Java Simplified / Session 22 / 31 of 45 Ex, Using GUI in UDP Socket Cắt 5 ký tự đầu của chuỗi: Java Simplified / Session 22 / 32 of 45 MultiThread trong các chương trình Server Đ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... = new String(rePacket.getData()); System.out.println("FROM SERVER:" + modiStr); clientSk.close(); } } Java Simplified / Session 22 / 28 of 45 UDP Server class UDPServer2 { public static void main(String args[]) throws Exception { //Create socket at 987 6 DatagramSocket serverSk = new DatagramSocket( 987 6); //Define data to send and receive byte[] reData = new byte[1024]; byte[] seData = new byte[1024];... Khởi tạo một socket UDP với đ/c cục bộ và port xác định Java Simplified / Session 22 / 15 of 45 DatagramSocket class: Methods 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 Java Simplified / Session... ◦ kiểm tra và sửa đổi kích thước tối đa của gói tin UDP, ◦ đóng socket Java Simplified / Session 22 / 14 of 45 Khởi tạo DatagramSocket 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... / 25 of 45 Ex: viết ứng dụng client/ server bằng UDP Socket 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 Java Simplified / Session 22 / 26 of 45 UDP client class UDPClient2 { public static void main(String args[])... send and receive byte[] seData = new byte[1024]; byte[] reData = new byte[1024]; seData = str.getBytes(); Java Simplified / Session 22 / 27 of 45 UDP Client // Create datagram with data to send from this socket to server DatagramPacket sePacket = new DatagramPacket(seData, seData.length, IPAddress, 987 6); //sending clientSk.send(sePacket); // Create datagram for receive from server DatagramPacket rePacket . 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. Từ 0 đến 1 023 ◦ Các cổng đã đăng ký: 1 024 đến 49151 ◦ Các cổng động/dành riêng 491 52 đế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. 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,