windows 實現UDP廣播獲取裝置

2021-10-07 07:31:22 字數 2914 閱讀 9724

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...