Danh mục

Lập trình mạng P3

Số trang: 13      Loại file: pdf      Dung lượng: 154.26 KB      Lượt xem: 8      Lượt tải: 0    
Jamona

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Giới thiệu về multicastMulticast : phát tán thông tin tới một nhóm địa chỉ một cách đồng thời. Root multicast và non –root multicast o Root multicast: một thành viên đóng vai trò là root phát tán thông tin tới các lá leaf, root truyền thông tin đồng thời tới các lá, lá chỉ truyền thông tin về root mà không thể truyền thông tin sang lá khác Non root multicast: tất cả các thành viên là các lá (leaf) , lá truyền thông tin tới tất cả các lá kháco.Chương 31. Giới thiệu về multicastUnicast: giao tiếp chỉ có...
Nội dung trích xuất từ tài liệu:
Lập trình mạng P3Chương 3: Lập trình Multicasting Chương 31. Giới thiệu về multicast- Multicast : phát tán thông tin tới một nhóm địa chỉ một cách đồng thời.Root multicast và non –root multicasto Root multicast: một thành viên đóng vai trò là root phát tán thông tin tới các lá leaf, root truyền thông tin đồng thời tới các lá, lá chỉ truyền thông tin về root mà không thể truyền thông tin sang lá kháco Non root multicast: tất cả các thành viên là các lá (leaf) , lá truyền thông tin tới tất cả các lá khác Chương 31. Giới thiệu về multicast- Unicast: giao tiếp chỉ có một bên gửi và một bên nhận- Broadcast: Giao tiếp gửi từ một điểm tới tất cả các điểm khác, broadcast chỉ có một điểm gửi đi duy nhất. Chương 32. Địa chỉ IP dùng cho Multicast- Sử dụng địa chỉ ở lớp D từ 224.0.0.0 tới 239.255.255.255- Một số địa chỉ IP đặc biệt dùng cho multicast Chương 33. Truyền/ nhận multicastGửi multicast- Hiệu chỉnh lại địa chỉ trong hàm sendto cho phù hợp, địa chỉ là nhóm cần multicastNhận multicast- Trước khi multicast, cần tham gia vào nhóm multicast bằng cách gọi hàm setsockoptstruct ip_mreq mreq;setsockopt(sock,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));ip_mreq có cấu trúc như sau:struct ip_mreq{ struct in_addr imr_multiaddr; /* multicast group to join */ struct in_addr imr_interface; /* interface to join on */ } Chương 33. Truyền/ nhận multicastVí dụ tham gia vào một nhóm multicastSOCKET s;SOCKADDR_IN localif;struct ip_mreq mreq;s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);localif.sin_family = AF_INET;localif.sin_port = htons(5150);localif.sin_addr.s_addr = htonl(INADDR_ANY);bind(s, (SOCKADDR *)&localif, sizeof(localif));mreq.imr_interface.s_addr = inet_addr(157.124.22.104);mreq.imr_multiaddr.s_addr = inet_addr(234.5.6.7);setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq)); Chương 33. Truyền/ nhận multicastNhận dữ liệunbytes=recvfrom(s,msgbuf,MSGBUFSIZE,0, (struct sockaddr *) &localif, sizeof(localif))) ; Chương 34. Gửi tin cậyThiết lập quá trình gửi tin cậy qua các bước sau: 1. Tạo socket multicast tin cậy 2. Bind socket to INADDR_ANY. 3. Thiết lập địa chỉ giao tiếp là RM_SET_SEND_IF. 4. Kết nối socket tới địa chỉ nhóm multicast. Chương 34. Gửi tin cậyVí dụ quá trình gửi tin cậy:SOCKET s;ULONG sendif;SOCKADDR_IN localif,multi; char buf[1024];int buflen=1024;s = socket(AF_INET, SOCK_RDM, IPPROTO_RM); // SOCK_RDM giống SOCK_DGRAM// Bind to INADDR_ANYlocalif.sin_family = AF_INET;localif.sin_port = htons(0);localif.sin_addr.s_addr = htonl(INADDR_ANY);bind(s, (SOCKADDR *)&localif, sizeof(localif)); Chương 34. Gửi tin cậy// Set the outgoing interfacesendif = inet_addr(157.124.22.104);setsockopt(s, IPPROTO_RM, RM_SET_SEND_IF, (char *)&sendif, sizeof(sendif));// Connect the socket to the multicast destinationmulti.sin_family = AF_INET;multi.sin_port = htons(5150);multi.sin_addr.s_addr =inet_addr(234.5.6.7); connect(s, (SOCKADDR *)&multi, sizeof(multi));// Send the datasend(s, buf, buflen, 0); // Close up the sessionclosesocket(s); Chương 35. Nhận tin cậyThiết lập quá trình gửi tin cậy qua các bước sau: 1. Tạo socket multicast tin cậy 2. Bind socket địa chỉ nhóm multicast. 3. Nếu chương trình nhận cần lắng nghe trên giao tiếp cụ thể thì gọi setsockopt và RM_ADD_RECEIVE_IF cho từng interface đó 4. Gọi listen 5. Chờ đợi accept Chương 35. Nhận tin cậyVí dụ nhận tin cậy:SOCKET s, ns;SOCKADDR_IN multi, safrom;ULONG localif;char buf[1024];int buflen=1024, fromlen, rc;s = socket(AF_INET, SOCK_RDM, IPPROTO_RM);multi.sin_family = AF_INET;multi.sin_port = htons(5150);multi.sin_addr.s_addr = inet_addr(234.5.6.7);bind(s, (SOCKADDR *)&multi, sizeof(multi));listen(s, 10); Chương 35. Nhận tin cậyVí dụ nhận tin cậy:localif = inet_addr(157.124.22.104);setsockopt(s, IPPROTO_RM, RM_ADD_RECEIVE_IF, (char *)&localif, sizeof(localif));fromlen = sizeof(safrom);ns = accept(s, (SOCKADDR *)&safrom, &fromlen);closesocket(s);// Dont need to listen anymore// st ...

Tài liệu được xem nhiều: