通過UDP廣播自動獲取IP位址

2021-04-21 14:16:52 字數 1570 閱讀 4342

客戶端:

socket ssrv;

sockaddr_in addrto;

wsadata wsdata;

bool bsocket;

//啟動socket庫,版本為2.0

word    wver = makeword(2, 0);

if( 0 != wsastartup(wver,&wsdata) )

bsocket=true;

//然後賦值給位址,用來從網路上的廣播位址接收訊息;

addrto.sin_family=af_inet;

addrto.sin_addr.s_addr=inaddr_broadcast;

addrto.sin_port=htons(nport); // 與伺服器端的相同

//設定該套接字為廣播型別

bool bsetbroadcast=true;

setsockopt(ssrv,sol_socket,so_broadcast,(char far *)&bsetbroadcast,sizeof(bsetbroadcast));

char    szmsg="get ipaddr";

int nlen=sizeof(addrto);

if( socket_error==sendto(ssrv, szmsg, strlen(szmsg), 0, (sockaddr*)&addrto, nlen) )

afxmessagebox(l"send udp failed");    

伺服器端:

socket sclient;

sockaddr_in clientaddr,bindaddr;

wsadata wsdata;

//啟動socket庫,版本為2.0

word    wver=makeword(2,0);

if( 0 != wsastartup(wver,&wsdata) )

//用udp初始化套接字

sclient=socket(af_inet,sock_dgram,0);

//設定該套接字為廣播型別,

bool optval=true;

bindaddr.sin_family=af_inet;

bindaddr.sin_addr.s_addr=htonl(inaddr_any);

bindaddr.sin_port=htons(m_nport);

setsockopt(sclient,sol_socket,so_broadcast,(char far *)&optval,sizeof(optval));

bind(sclient,(sockaddr *)&bindaddr,sizeof(sockaddr_in));

char buf[256] = ;

int fromlength=sizeof(sockaddr);

while(1)

;cxastrtowide(pipaddr, wzipbuffer, 32);

afxmessagebox(wzipbuffer);}}

else

sleep(1000);

}closesocket(sclient);

通過廣播獲取ip位址的實現

但這個過程有幾個問題要考慮。第一點,如果接收方有多個網絡卡,我怎麼知道 hello 包是通過哪個網絡卡接收的呢?第二點,在接收方我可以用監聽那個廣播埠的socket來傳送訊息嘛?對於第一點,也是苦惱了我很久的問題,最終找到了方法 getsockname,這個函式可以根據addr來得到ip位址,用c語...

QT 通過UDP廣播獲取網路中所有裝置ip位址

說明 本文是c 的qt版本例子說明,有時候需要搜尋網路中的裝置,機器,伺服器等,這就要要用到udp廣播的方式,傳送廣播命令,廣播給網路中的每乙個主機,該主機接收到廣播命令後,立刻傳送給請求端自己的裝置資訊,這裡以ip資訊為例子。思路 在每乙個裝置中部署sever端程式進行監控,client端傳送廣播...

通過IP獲取MAC位址

option explicit private declare function openprocess lib kernel32 byval dwdesiredaccess as long,byval binherithandle as long,byval dwprocessid as long...