18,356
社区成员
发帖
与我相关
我的任务
分享
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return;
}
SOCKET sSrv;
sockaddr_in addrto;
WSADATA wsdata;
BOOL bsocket;
char buff[255] = "";
sSrv=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
bsocket=TRUE;
//然后赋值给地址,用来从网络上的广播地址接收消息;
addrto.sin_family=AF_INET;
addrto.sin_addr.s_addr=INADDR_BROADCAST;
addrto.sin_port=htons(8900); // 与服务器端的相同
//设置该套接字为广播类型
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) )
MessageBox(NULL,"Send UDP Failed","",MB_OK);
while(true)
{
// 接收数据
int nSendSize = recvfrom(sSrv, buff, 255, 0, (SOCKADDR*)&addrto,&nLen);
if(SOCKET_ERROR == nSendSize)
{
int err = WSAGetLastError();
printf("\"recvfrom\" error! error code is %d\n", err);
return ;
}
buff[nSendSize] = '\0';
printf("received ip: %s\n", buff);
}