日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络编程之---广播和IP多播

發布時間:2024/1/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络编程之---广播和IP多播 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

一.廣播

1.接收

void main() {SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);// 首先要綁定一個本地地址,指明廣播端口號SOCKADDR_IN sin;sin.sin_family = AF_INET;sin.sin_addr.S_un.S_addr = INADDR_ANY; sin.sin_port = ::ntohs(4567);if(::bind(s, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR){printf(" bind() failed \n");return;}// 接收廣播printf(" 開始在4567端口接收廣播數據... \n\n");SOCKADDR_IN addrRemote; int nLen = sizeof(addrRemote);char sz[256];while(TRUE){int nRet = ::recvfrom(s, sz, 256, 0, (sockaddr*)&addrRemote, &nLen);if(nRet > 0){sz[nRet] = '\0';printf(sz);}} }

2.發送

void main() {SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);// 有效SO_BROADCAST選項BOOL bBroadcast = TRUE;::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(BOOL)); // 設置廣播地址,這里的廣播端口號(電臺)是4567SOCKADDR_IN bcast;bcast.sin_family = AF_INET;bcast.sin_addr.s_addr = INADDR_BROADCAST; // ::inet_addr("255.255.255.255");bcast.sin_port = htons(4567);// 發送廣播printf(" 開始向4567端口發送廣播數據... \n \n");char sz[] = "This is just a test. \r\n";while(TRUE){::sendto(s, sz, strlen(sz), 0, (sockaddr*)&bcast, sizeof(bcast));::Sleep(5000);} }

二.IP多播

1.加入多播組并接收數據

void main() {SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);// 允許其它進程使用綁定的地址BOOL bReuse = TRUE;::setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&bReuse, sizeof(BOOL)); // 綁定到4567端口sockaddr_in si;si.sin_family = AF_INET;si.sin_port = ::ntohs(4567);si.sin_addr.S_un.S_addr = INADDR_ANY;::bind(s, (sockaddr*)&si, sizeof(si));// 加入多播組ip_mreq mcast;mcast.imr_interface.S_un.S_addr = INADDR_ANY;mcast.imr_multiaddr.S_un.S_addr = ::inet_addr("234.5.6.7"); // 多播地址為234.5.6.7::setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mcast, sizeof(mcast));// 接收多播組數據printf(" 開始接收多播組234.5.6.7上的數據... \n");char buf[1280];int nAddrLen = sizeof(si);while(TRUE){int nRet = ::recvfrom(s, buf, strlen(buf), 0, (sockaddr*)&si, &nAddrLen);if(nRet != SOCKET_ERROR){buf[nRet] = '\0';printf(buf);}else{int n = ::WSAGetLastError();break;}} }

2.發送廣播

同上

設置SO_REUSEADDR,則允許多個進程綁定到這個端號,這樣加入到同個端口的組都可以接收到數據

三.源地址的IP多播

即可指定接收組內特定IP地址的消息

c#參考:http://www.cnblogs.com/xuhx/archive/2004/06/23/18150.html
http://www.cnblogs.com/xuhx/archive/2004/06/27/18960.html

Windows網絡與通信程序設計 第5章

轉載于:https://www.cnblogs.com/Clingingboy/archive/2011/06/21/2086349.html

總結

以上是生活随笔為你收集整理的网络编程之---广播和IP多播的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。