客戶端:
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...