
在UDP正常通信中我的server和client都可以正常通信,可是在server广播消息时client接收不到广播消息而server可以接收到自己的广播消息!如何让client接收到UDP的广播消息?
在测试过程中发现client如果bind了相应的广播端口的话可以正常接收广播消息!
重要代码如下:
server:
//Bind端口
boolCUDPServer::BindPort(UNSHORTunBindPort)
{
//设置绑定方式
structsockaddr_inServerAddr;
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=htons(unBindPort);///端口
ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);///本机
m_Socket=socket(AF_INET,SOCK_DGRAM,0);
BOOLbBroadcast=TRUE;
setsockopt(m_Socket,SOL_SOCKET,SO_BROADCAST,(constchar*)&bBroadcast,sizeof(BOOL));
if(SOCKET_ERROR==bind(m_Socket,(structsockaddr*)&ServerAddr,sizeof(ServerAddr)))
{
returnfalse;
}
returntrue;
}
//发送广播消息
boolCUDPServer::BroadCase(char*szSend,DWORDdwSendSize)
{

SOCKADDR_INBroadcastAddr=m_ClientAddr;
BroadcastAddr.sin_family =AF_INET;
BroadcastAddr.sin_addr.s_addr =htonl(INADDR_BROADCAST);
BroadcastAddr.sin_port =htons(8848);
intnSiz=sizeof(SOCKADDR_IN);
if(SOCKET_ERROR==sendto(m_Socket,szSend,dwSendSize,0,(structsockaddr*)&BroadcastAddr,sizeof(BroadcastAddr)))
{
returnfalse;
}
unsignedshort*pUnBuff=(unsignedshort*)szSend;
cout<<"CUDPClient::BroadCase:"<<inet_ntoa(BroadcastAddr.sin_addr)<<"-"<<"size:"<<pUnBuff[0]<<"-"<<"type:"<<pUnBuff[1]<<endl;
returntrue;
}
client:
//Bind端口
boolCUDPClient::BindPort(std::stringstrBindIP,UNSHORTunBindPort)
{
m_ServerAddr.sin_family=AF_INET;
m_ServerAddr.sin_port=htons(unBindPort);///server的端口
m_ServerAddr.sin_addr.s_addr=inet_addr(strBindIP.c_str());///server的地址
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-43924-1.html
你永远是我们的浪漫功夫熊猫