MFC udp广播后,recvfrom得到的为什么一直是电脑的IP,小弟我想得到设备的IP
MFC udp广播后,recvfrom得到的为什么一直是电脑的IP,我想得到设备的IP
这个是监控工具的:

192.168.1.79是电脑的,发送广播,192.168.1.80是个设备的,广播发EASYNET,下面返回NETEASY ,
以下是代码: 返回的都是电脑的:192.168.1.79
------解决方案--------------------
你机器recvfrom不是绑定了端口120吗? 192.168.1.80又没有回应到120端口你怎么接收得到?
------解决方案--------------------
关键是你要用120端口发送啊,这样才能用120接收到
------解决方案--------------------
解决了,就给点分呗,留着没用,,,,
这个是监控工具的:
192.168.1.79是电脑的,发送广播,192.168.1.80是个设备的,广播发EASYNET,下面返回NETEASY ,
以下是代码: 返回的都是电脑的:192.168.1.79
SOCKET sock; //socket套接字
char szMsg[] = "EASYNET";//广播发送的字段
WORD wVersionRequested; //1.启动SOCKET库,版本为2.0
WSADATA wsaData;
int err;
int i =1;
wVersionRequested = MAKEWORD( 2, 0 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( 0 != err ) //检查Socket初始化是否成功
{
MessageBox("Socket2.0初始化失败,Exit!");
return;
}
if (LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 )//检查Socket库的版本是否为2.0
{
WSACleanup( );
return;
}
sock = socket(AF_INET,SOCK_DGRAM,0);
if (INVALID_SOCKET == sock ) {
MessageBox("Socket 创建失败,Exit!");
return;
}
bool opt = true;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, reinterpret_cast<char FAR *>(&opt), sizeof(opt));//3.设置该套接字为广播类型
sockaddr_in addrto; //设置发往的地址
memset(&addrto,0,sizeof(addrto));
addrto.sin_family = AF_INET; //地址类型为internetwork
addrto.sin_addr.s_addr = INADDR_BROADCAST; //设置ip为广播地址
addrto.sin_port = htons(120); //端口号为120
//绑定地址和端口号
SOCKET sockSvr=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN svrAddr={0};
svrAddr.sin_port=htons(120);
svrAddr.sin_family=AF_INET;
svrAddr.sin_addr.S_un.S_addr=INADDR_ANY;
bind(sockSvr,(SOCKADDR*)&svrAddr,sizeof(svrAddr));
int nlen=sizeof(addrto);
unsigned int uIndex = 1;
CHAR szBuff[100]={0};
SOCKADDR_IN clientAddr={0};
int nLen=sizeof(clientAddr);
while (i <3)
{
Sleep(1000); //程序休眠一秒
if( sendto(sock, szMsg, strlen(szMsg), 0, (sockaddr*)&addrto,nlen)== SOCKET_ERROR )//广播
MessageBox((LPCTSTR)WSAGetLastError);
else
{
//MessageBox("广播一次!释放socket");
recvfrom(sockSvr,szBuff,100,0,(SOCKADDR*)&clientAddr,&nLen);
char * pszIP=inet_ntoa(clientAddr.sin_addr);
MessageBox(pszIP);
i++;
//WSACleanup( );
}
}
/*
while (recvfrom(sockSvr,szBuff,100,0,(SOCKADDR*)&clientAddr,&nLen)>=0)
{
char * pszIP=inet_ntoa(clientAddr.sin_addr);
MessageBox(pszIP);
}
*/
//关闭socket
closesocket(sockSvr);
if (!closesocket(sock)) //关闭套接字
{
WSAGetLastError();
return;
}
if (!WSACleanup()) //关闭Socket库
{
WSAGetLastError();
return;
}
------解决方案--------------------
你机器recvfrom不是绑定了端口120吗? 192.168.1.80又没有回应到120端口你怎么接收得到?
------解决方案--------------------
关键是你要用120端口发送啊,这样才能用120接收到
------解决方案--------------------
解决了,就给点分呗,留着没用,,,,