//...
SOCKET socket_broad;
//...
void SendBroadcast()
{
sendto(...);//广播出请求,局域网内的其它机器可以收到
}
void ReadBroadcast()
{//接收广播消息,并发送回应
struct sockaddr_in from;
int fromlen = sizeof(from);
int recvcount=recvfrom(socket_broad,buffer,sizeof(buffer),0,(sockaddr*)&from,&fromlen);
//..解析
sendto(...);//根据解析广播出相应的回应,可局域网内的其它机器接收不到
}
以下为循环调用 C/C++ code
fd_set fd_read;
timeval timeout;
timeout.tv_sec=0;
timeout.tv_usec=5000;
FD_ZERO(&fd_read);
FD_SET(socket_broad,&fd_read);
DWORD timebroadcast=0;
DWORD timecurrent;
int s=select(0,&fd_read,NULL,NULL,&timeout);
if (s==SOCKET_ERROR)
{
printf("select error:%d\r\n",GetLastError());
}
if(s>0)
{
if ( FD_ISSET(socket_broad,&fd_read))
{
ReadBroadcast();
}
}
timecurrent=timeGetTime();
if (timecurrent-timebroadcast>5000)
{
SendBroadcast();//定时广播请求
timebroadcast=timecurrent;
}
SOCKET socket_broad;
//...
void SendBroadcast()
{
sendto(...);//广播出请求,局域网内的其它机器可以收到
}
void ReadBroadcast()
{//接收广播消息,并发送回应
struct sockaddr_in from;
int fromlen = sizeof(from);
int recvcount=recvfrom(socket_broad,buffer,sizeof(buffer),0,(sockaddr*)&from,&fromlen);
//..解析
sendto(...);//根据解析广播出相应的回应,可局域网内的其它机器接收不到
}
以下为循环调用 C/C++ code
fd_set fd_read;
timeval timeout;
timeout.tv_sec=0;
timeout.tv_usec=5000;
FD_ZERO(&fd_read);
FD_SET(socket_broad,&fd_read);
DWORD timebroadcast=0;
DWORD timecurrent;
int s=select(0,&fd_read,NULL,NULL,&timeout);
if (s==SOCKET_ERROR)
{
printf("select error:%d\r\n",GetLastError());
}
if(s>0)
{
if ( FD_ISSET(socket_broad,&fd_read))
{
ReadBroadcast();
}
}
timecurrent=timeGetTime();
if (timecurrent-timebroadcast>5000)
{
SendBroadcast();//定时广播请求
timebroadcast=timecurrent;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货