广播时本机会收到自己发的信息,如何屏蔽?或者能与其他机器发来的信息区分开也行。其他机器不使用广播机制,用一对一UDP传输。

解决方案 »

  1.   


      char szBuf[MAX_BUFFER] = {0};  
        SOCKADDR_IN remote;  
        memset(&remote, 0, sizeof(remote));  
        int len = sizeof(remote);  
        while(TRUE)  
        {  
            if(SOCKET_ERROR == recvfrom(sock, szBuf, MAX_BUFFER-1, 0, (LPSOCKADDR)&remote, &len))  
            {  
                printf("recvfrom failed with error: %d\n", WSAGetLastError());  
                continue;  
            }  
            printf("recv data: <%s : %d> %s\n", inet_ntoa(remote.sin_addr), ntohs(remote.sin_port), szBuf);  
        }   
    是否remote.sin_addr就是发方的ip?是的话就可以区别开了
      

  2.   

    难道你没封装广播头啊? 我是通过用户来判断的,你可以通过服务地址来判断,其实方法很多1
    //是否来自自己
    if (strcmp(pMCHead->szUser,m_szUser) == 0)
    {
    return;
    }
      

  3.   


    我三楼获取数据里的remote能获取到发方IP吗?
      

  4.   

    你的if(SOCKET_ERROR == recvfrom(sock, szBuf, MAX_BUFFER-1, 0, (LPSOCKADDR)&remote, &len))  
    recvfrom函数中的remote参数中就保存了发送端的IP和PORT信息了
      

  5.   

    可以的,断点到recvfrom可以看见
      

  6.   

    你的if(SOCKET_ERROR == recvfrom(sock, szBuf, MAX_BUFFER-1, 0, (LPSOCKADDR)&remote, &len))   
    recvfrom函数中的remote参数中就保存了发送端的IP和PORT信息了