1、獲取本機所有ip,把ip的最後乙個字段值改為255,去掉重複的ip
2、遍歷所有ip進行廣播
// broadcastdemo.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include #include #include #include #pragma comment(lib, "ws2_32.lib")
#include #include #include using namespace std;
// 解析接收內容
bool parserecvdata(const vector& vctrecvdata, string& strip, int& itcpport, string& strtypename)
char sztemp[512] = ;
std::string szmodelname;
szmodelname.assign(vctrecvdata.begin(), vctrecvdata.begin() + 10);
int ipos = szmodelname.find_last_not_of(' ');//去掉尾部空格
szmodelname = szmodelname.substr(0,ipos + 1);
strtypename = szmodelname;
sprintf(sztemp, "%d.%d.%d.%d", *(vctrecvdata.begin() + 18), *(vctrecvdata.begin() + 19), *(vctrecvdata.begin() + 20), *(vctrecvdata.begin() + 21));
std::string ipaddress(sztemp);
int iport = (*(vctrecvdata.begin() + 32) << 8) + *(vctrecvdata.begin() + 33);
sprintf(sztemp, "%d", iport);
std::string portnumber(sztemp);
return true;
}// 獲取廣播位址
bool getbroadcastaddrs(set& lstip)
; gethostname(szhostname, sizeof(szhostname));
struct hostent* phost = gethostbyname(szhostname);
if (phost == null)
in_addr addr;
for (int i = 0; phost->h_addr_list[i] != null; i++)
return true;
}int main(int argc, char*ar**)
setvctiplist;
if (!getbroadcastaddrs(vctiplist))
int isocket = 0;
struct sockaddr_in mcast_addr;
isocket = socket(af_inet, sock_dgram, 0);
if (isocket == -1)
memset(&mcast_addr, 0, sizeof(mcast_addr)); /*初始化ip多播位址為0*/
mcast_addr.sin_family = af_inet; /*設定協議族類行為af*/
mcast_addr.sin_addr.s_addr = inet_addr("192.168.199.255"); /*設定多播ip位址*/
mcast_addr.sin_port = htons(1860); /*設定多播埠*/
/*向多播位址傳送資料*/
string strsenddata = "find\r";
int iret = sendto(isocket, strsenddata.c_str(), strsenddata.length(), 0, (struct sockaddr*)&mcast_addr, sizeof(mcast_addr)) ;
if( iret < 0)
dword dwtime = gettickcount();
while( (gettickcount() - dwtime) < 6000)
int times = 0;
int addr_len = 0;
const int ibufsize = 256;
char buff[ibufsize] = ;
addr_len = sizeof(mcast_addr);
memset(buff, 0, ibufsize); /*清空接收緩衝區*/
// 接收資料
iret = recvfrom(isocket, buff, ibufsize, 0,(struct sockaddr*)&mcast_addr, &addr_len);
if( iret == -1)
/*列印資訊*/
printf("recv %dst message from server:%s\n", times, buff);
//vectorvctdata;
//string strip;
//int itcpport;
//string strtypename;
//for (int i = 0; i < ibufsize; i++)
////parserecvdata(vctdata, strip, itcpport, strtypename);
} closesocket(isocket);
wsacleanup();
system("pause");
return 0;
}
UDP廣播socket實現
udp廣播 const int max buf len 255 int main int argc,char argv if lobyte wsadata.wversion 2 hibyte wsadata.wversion 2 建立socket socket connect socket conn...
UDP實現廣播傳輸
在生活中 廣播無處不在 如大街上上叫賣的商人,但是在網路中廣播是什麼樣子的呢?網路上的廣播指 由一台主機向該主機所在子網內 同乙個區域網 的所有主機傳送資料的方式。如下圖的 1 號主機廣播給 2 3 4 5 號主機傳送資料 實現廣播,離不開廣播位址,同乙個子網 區域網 的所有主機網絡卡都會接收所在網...
利用UDP協議實現廣播通訊
在開發應用程式時,如果需要向網路中的所有使用者傳送資訊,可以採用udp協議進行廣播通訊,而不用一一向每個使用者傳送訊息。在程式中使用廣播通訊非常簡單,在建立套接字後,呼叫 setsockopt 方法使套接字具有so broadcast選項。然後再傳送訊息時,降低至設定為廣播形式。建立套接字 m ps...