Cấu trúc dữ liệu và thuật toán - UDP Multicast
Viết chương trình chat với một nhóm người.
Viết trương trình gởi một tập tin cho một nhóm máy trên mạng.
Viết chương trình gởi video cho một nhóm máy trên mạng.
15 trang |
Chia sẻ: nguyenlam99 | Lượt xem: 1171 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Cấu trúc dữ liệu và thuật toán - UDP Multicast, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
*UDP MulticastÔn địa chỉ IPLớpCấu trúc địa chỉ IPSố bit mạng/số bit hostTổng sốmạng/lớpTổng số host/mạngVùng địa chỉ IPA0|netid|hostid 7/2427-2=126224-2=17.777.2141.0.0.1-126.0.0.0B1|0|netid|hostid 14/16214-2=16382216-2=65.643128.1.0.0-191.254.0.0C1|1|0|netid|hostid22/8 222-2=419430228-2=245192.0.1.0-223.255.254.0D1|1|1|0| địa chỉ multicast ---224.0.0.0-239.255.255.255E1|1|1|1 ---240.0.0.0-254.255.255.255Loopback- ---127.x.x.xKhái niệm cơ bảnTất cả các ví dụ trước đây là unicast. Dữ liệu được gởi từ điểm này tới điểm khác.Broadcast: dữ liệu được gởi tới tất cả các điểm.Có địa chỉ IP hỗ trợ Broadcast (192.168.0.255, 255.255.255.0, 192.168.0.127)Router giới hạn broadcast trong mạng cục bộ hoặc subnet.Multicast gởi dữ liệu tới nhiều điểm (không phải là tất cả).Mục đích multicastR1R2R3R4Nhân bản dữ liệu tại nguồnR1R2R3R4Nhân bản trong mạngNhân bản và gởi dữ liệuNhân bảnNhân bảnVí dụNhu cầu multicastHội nghi truyền hình (video conference). Nhóm tinNhóm game nhiều người chơiHệ thống phân tán tập tinCơ sở dữ liệu phân tánTính toán song songMulticastRFC1112 (8-1989)Phân tán gói dữ liệu (datagram) tới một nhóm đối tượng lắng nghe trên mạng. Cần phải định tuyến các gói tới các nút mạng đăng ký lắng nghe mà không qua nhiều gói ..MBONE là cách thức đề tạo ra đường dẫn gõi dữ liệu đi trên mạng Internet. Multicast Multicasts gởi gói dữ liệu vào một đia chỉ đặc biệt (địa chỉ muticast). Multicast groups là một kênh giao tiếp giữa các node (cây định tuyến muticast). Địa chỉ multicast (IETF) phạm vi từ 224.0.0.1 đến 239.255.255.255.R1R2R3R4R5R6R7216345S: sourceMulticastĐể gởi (hoặc nhận) một gói dữ liệu từ một nhóm multicast, cần phải thực hiện đăng ký gia nhập nhóm. Kết quả là trong thông điệp IGMP(Internet Group Management Protocol) được gởi tới router của máy gởi(RFCs 988/1112/2236)Tạo gói (datagram) với số hiệu cổng-port và địa chỉ nhóm (multicast ip). Java cung cấp một lớp đối tượng socket đặt biệt cho việc gởi và nhận dữ liệu: java.net.MulticastSocketMột số nhóm địa chỉ multicast224.0.0.1 tất cả host trong local subnet224.0.1.7 multicast tin tức Audio224.0.1.12 Video của IETF meetingsCó 268 triệu địa chỉ multicast (IPv4) với 65 nghìn ports cho mỗi địa chỉ!java.net.MulticastSocketLớp con của java.net.DatagramSocketCác hàm khởi tạo tương tự lớp cha. Một số phương thức bổ sung:void joinGroup(InetAddress mcastGroup)Nhập vào địa chỉ của ip multicast của nhóm. void leaveGroup(InetAddress mcastGroup)Rời nhóm địa chỉ. void setTimeToLive(int ttl)Thiết lập cách thức gói dữ liệu tồn tại trên đường truyền (qua số router). int getTimeToLive()Các bước để gởi gói dữ liệu multicastViệc gởi gói dữ liệu tương tự như các gởi gói UDP thông thường . . .nhưng cần phải đăng ký nhóm multicast và quyết định thời gian sống của gói. Các bước như sau:Tạo đối tượng MulticastSocket.Tham gia nhóm multicast.Tạo đối tượng DatagramPacket.Gởi gói thông qua socket.Rời nhóm multicast.Ví dụ: UDP multicast senderInetAddress multicastGroup = InetAddress.getByName(multicastGroupAddr);//tạo socket để gởi dữ liệuMulticastSocket socket = new MulticastSocket();socket.joinGroup(multicastGroup); //tham gia vào nhóm multicast//thiết lập thời gian sống của gói dữ liệu (số router)socket.setTimeToLive(5);//dữ liệu gởi đibyte[] data = “This is the message”.getBytes();//đóng gói dữ liệu để gởi điDatagramPacket datagram = new DatagramPacket(data, data.length);//thiết lập địa chỉ multicast cho gói tớidatagram.setAddress(multicastGroup);//thiết lập số hiệu cổng datagram.setPort(9876);//gởi gói dữ liệu đisocket.send(datagram);//thoát khỏi nhómsocket.leaveGroup(multicastGroup);Các bước để nhận gói multicastCác bước như sau:Tạo đối tượng socket lắng nghe ở port tương ứng. Tham gia nhóm multicast.Tạo gói datagram rỗng.Đợi để nhận gói (datagram to) được phân tán tới socket. Sử dụng dữ liệu trong gói. Rời nhóm multicast. Ví dụ: UDP multicast reciever//tạo địa chỉ nhóm multicastInetAddress multicastGroup = InetAddress.getByName(multicastGroupAddr);//tạo đối tượng socket để nhận gói dữ liệuMulticastSocket socket = new MulticastSocket(9876);//gia nhập vào nhóm multicast để đọc dữ liệusocket.joinGroup(multicastGroup);//tạo bộ đệm để nhận dữ liệu byte[] data = new byte[1000];//tạo gói rỗng dựa trên bộ đệmDatagramPacket packet = new DatagramPacket(data, data.length);//nhận dữ liệu vào góisocket.receive(packet);//lấy dữ liệu trong gói để hiển thịString message = new String(packet.getData(), 0, packet.getLength());//rời nhóm multicastsocket.leaveGroup(multicastGroup);Bài tậpViết chương trình chat với một nhóm người.Viết trương trình gởi một tập tin cho một nhóm máy trên mạng.Viết chương trình gởi video cho một nhóm máy trên mạng.
Các file đính kèm theo tài liệu này:
- chuong_8_tuan_tu_hoa_doi_tuong_0145.ppt