Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 40 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
40
Dung lượng
0,95 MB
Nội dung
Chương : LẬP TRÌNH SOCKET VỚI UDP Tổng quan giao thức UDP 1.1 Hoạt động giao thức UDP 1.2 Các ưu nhược điểm UDP 1.3 Khi sử dụng UDP Lớp DatagramPacket 2.1.Các constructor để nhận datagram 2.2.Constructor để gửi datagram Lớp DatagramSocket Nhận gói tin Gửi gói tin Demo giao thức UDP TỔNG QUAN VỀ UDP + TCP/IP giao thức mà thực họ giao thức, bao gồm giao thức : IP, TCP UDP + UDP nằm tầng giao vận, phía giao thức IP Tầng giao vận cung cấp khả truyền tin mạng thông qua gateway + Nó sử dụng địa IP để gửi gói tin Internet mạng thơng qua trình điều khiển thiết bị khác + Giao thức UDP giao thức đơn giản, không liên kết cung cấp dịch vụ tầng giao vận với tốc độ nhanh 11 Hoạt động giao thức UDP + Khi ứng dụng dựa giao thức UDP gửi liệu tới host khác mạng, UDP thêm vào header có độ dài byte chứa : - số hiệu cổng nguồn đích - tổng chiều dài liệu - checksum + IP thêm vào header riêng vào đầu datagram UDP để tạo lên datagram IP 11 Hoạt động giao thức UDP 1.2 Các ưu nhược điểm UDP * Ưu điểm: + Không cần thiết lập liên kết + Vì UDP khơng sử dụng tín hiệu handshaking, nên tránh thời gian trễ - Đó lý DNS thường sử dụng giao thức UDP TCP - DNS chậm nhiều dùng TCP + Tốc độ UDP nhanh so với TCP + UDP hỗ trợ liên kết 1-1, 1-n, ngược lại TCP hỗ trợ liên kết 1-1 + Kích thước header : UDP có byte header cho đoạn, ngược lại TCP cần header 20 byte, sử dụng băng thơng 1.2 Các ưu nhược điểm UDP * Nhược điểm: + UDP không đảm bảo việc liệu đến đích hay chưa - Do UDP khơng gửi tín hiệu bắt tay bên gửi bên nhận - Vì phía gửi khơng có cách để biết datagram đến đích hay chưa + UDP không hỗ trợ phiên Trong TCP sử dụng số phiên (session ID) để trì liên kết hai host 1.2 Các ưu nhược điểm UDP * Nhược điểm: + UDP không đảm bảo có liệu tới đích - Để gửi liệu tới hệ thống cuối, UDP phân chia liệu thành đoạn nhỏ - UDP không đảm bảo đoạn đến đích thứ tự chúng tạo nguồn + TCP sử dụng số thứ tự với số hiệu cổng gói tin xác thực thường xuyên - Điều đảm bảo gói tin đến đích thứ tự mà tạo 1.2 Các ưu nhược điểm UDP * Nhược điểm: + TCP có tính bảo mật cao UDP - Trong nhiều tổ chức firewall router cần gói tin UDP - Vì hacker thường sử dụng cổng UDP + UDP khơng có kiểm soát luồng - Một ứng dụng UDP thiết kế tồi làm giảm băng thơng mạng 1.2 Các ưu nhược điểm UDP Các đặc trưng TCP UDP Hướng liên kết Thiết lập phiên Độ tin cậy Xác thực Đánh thứ tự Điều khiển luồng Bảo mật Có Có Có Có Có Có Nhiều Khơng Khơng Khơng Khơng Khơng Khơng Ít 1.3 Khi sử dụng UDP Rất nhiều ứng dụng Internet sử dụng UDP Dựa ưu nhược điểm UDP kết luận UDP có ích khi: + Sử dụng cho phương thức truyền broadcasting multicasting muốn truyền tin với nhiều host + Kích thước datagram nhỏ + Khơng cần thiết lập liên kết + Khơng cần truyền lại gói tin + Ứng dụng không gửi liệu quan trọng + Băng thơng mạng đóng vai trò quan trọng NHẬN CÁC GÓI TIN Trước ứng dụng đọc gói tin UDP gửi máy xa + Nó phải gán socket với cổng UDP cách sử dụng DatagramSocket + Ngồi tạo DatagramPacket đóng vai trò chứa liệu gói tin UDP + NHẬN CÁC GĨI TIN packet Đọc gói tin Chuyển gói tin vào DatagramPacket Ứng dụng UDP DatagramSocket DatagramPacket + Khi ứng dụng muốn đọc gói tin UDP, gọi phương thức DatagramSocket.receive() + Phương thức chép gói tin UDP vào DatagramPacket xác định + Xử lý nội dung gói tin tiến trình lặp lại cần NHẬN CÁC GÓI TIN DatagramPacket dp=new DatagramPacket(new byte[256],256); DatagramSocket ds=new DatagramSocket(2012); boolean finished=false; while(!finished) { ds.receive(dp); //Xử lý gói tin } ds.close(); NHẬN CÁC GĨI TIN + Khi xử lý gói tin ứng dụng phải làm việc trực tiếp với mảng byte + Nếu ứng dụng đọc văn ta sử dụng lớp từ gói vào để chuyển đổi mảng byte với luồng stream luồng reader -Bằng cách gắn kết luồng nhập ByteArrayInputStream với nội dung datagram sau kết nối với kiểu luồng khác, bạn truy xuất tới nội dung gói UDP cách dễ dàng + Ngồi ta dùng luồng vào I/O để xử lýdữ liệu - Bằng cách sử dụng luồng DataInputStream BufferedReader để truy xuất tới nội dung mảng byte NHẬN CÁC GÓI TIN DatagramPacket Địa IP InputStream ByteArrayInputStream Địa cổng Dữ liệu gói tin byte[]={…,…} InputStreamReader Ví dụ : Để gắn kết luồng DataInputStream với nội dung DatagramPacket, ta sử dụng đoạn mã sau: ByteArrayInputStream bis=new ByteArrayInputStream(dp.getData()); DataInputStream dis=new DataInputStream(bis); //đọc nội dung gói tin UDP GỬI CÁC GÓI TIN + Lớp DatagramSocket sử dụng để gửi gói tin - Khi gửi gói tin, ứng dụng phải tạo DatagramPacket, thiết lập địa thông tin cổng, ghi liệu cần truyền vào mảng byte + Nếu muốn gửi thông tin phúc đáp ta biết địa số hiệu cổng gói tin nhận -Mỗi gói tin sẵn sàng để gửi, ta sử dụng phương thức send() lớp DatagramSocket để gửi gói tin GỬI CÁC GÓI TIN DatagramSocket Gán cổng UDP Gửi DatagramPacket cách sử dụng Ứng dụng UDP DatagramSocket Xây dựng gói tin DatagramPacket Packet GỬI CÁC GĨI TIN //Socket lắng nghe gói tin đến cổng 2013 DatagramSocket socket = new DatagramSocket(2013); DatagramPacket packet = new DatagramPacket (new byte[256], 256); packet.setAddress ( InetAddress.getByName ( somehost ) ); packet.setPort ( 2013 ); boolean finished = false; while !finished ) { // Ghi liệu vào vùng đệm buffer socket.send (packet); // Thực hành động đó, chẳng hạn đọc gói tin khác kiểm tra xem // gói tin cần gửi hay không } socket.close(); DEMO GIAO THỨC UDP // Chương trình Client import java.net.*; import java.io.*; public class UDPClient1 { public final static int DEF_PORT=1234; public static void main(String args[]) { String hostname; int port=DEF_PORT; if(args.length>0) { hostname=args[0]; try{} catch(Exception e){ port =Integer.parseInt(args[1]); } } else { hostname="127.0.0.1"; } DEMO GIAO THỨC UDP // Chương trình Client try{ InetAddress dc=InetAddress.getByName(hostname); BufferedReader userInput=new BufferedReader(new InputStreamReader(System.in)); DatagramSocket ds =new DatagramSocket(port); while(true){ String line=userInput.readLine(); if(line.equals("exit"))break; byte[] data=line.getBytes(); DatagramPacket dp=new DatagramPacket(data,data.length,dc,port); ds.send(dp); dp.setLength(50505); DEMO GIAO THỨC UDP // Chương trình Client ds.receive(dp); ByteArrayInputStream bis =new ByteArrayInputStream(dp.getData()); BufferedReader dis =new BufferedReader(new InputStreamReader(bis)); System.out.println(dis.readLine()); } }catch(UnknownHostException e){System.err.println(e);} catch(IOException e){System.err.println(e);}} } DEMO GIAO THỨC UDP // Chương trình Server import java.net.*; import java.io.*; public class UDPServer1 { public final static int DEF_PORT=1234; // phuong thuc doi sang chuoi vua hoa vua thuong private static String VuaHoaVuaThuong(String s3) { int k =0, i; char c; String st3=""; k = s3.length(); for(i=0;i='A'&& c=‘a'&& c