MFC udp广播后,recvfrom得到的为什么一直是电脑的IP,小弟我想得到设备的IP

MFC udp广播后,recvfrom得到的为什么一直是电脑的IP,我想得到设备的IP
本帖最后由 VisualEleven 于 2014-07-25 22:52:52 编辑
这个是监控工具的:

MFC udp广播后,recvfrom得到的为什么一直是电脑的IP,小弟我想得到设备的IP

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接收到
------解决方案--------------------
解决了,就给点分呗,留着没用,,,,MFC udp广播后,recvfrom得到的为什么一直是电脑的IP,小弟我想得到设备的IP