程序思路:创建一个广播SOCKET,绑定好端口,然后创建一个线程循环接收网络上的广播封包,接收到了后判断一下是“a”或者是“b”,如果判断正确的话再发送一个广播回给对方一个信息。    现在问题是:如果对方发送一个广播为“a”,那么我这边会一直不停到“a”,对方关闭了后,我还会收到这个“a”,除非我把程序关了后再开才又正常。
BOOL CUDP_TestDlg::InitSocket()
{
    BOOL optval = true;
    sock = socket(AF_INET,SOCK_DGRAM,0);    
    SOCKADDR_IN addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(13364);
    addr.sin_addr.S_un.S_addr = INADDR_ANY;    setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char *)&optval,sizeof(optval));
    bind(sock,(SOCKADDR *)&addr,sizeof(SOCKADDR));    
    return TRUE;
}DWORD WINAPI CUDP_TestDlg::RecvProc(LPVOID lpParameter)
{
    SOCKET sock=((RECVPARAM*)lpParameter)->sock;
    delete lpParameter;
    TCPCFG recv_cfg;
    IC_NAME send_cfg;
    char tempBuf[500];    int len = sizeof(SOCKADDR);
    while(TRUE)
    {
        memset(tempBuf,0,sizeof(tempBuf));        
        int result = recvfrom(sock,tempBuf,sizeof(tempBuf),0,(struct sockaddr *)&addrFrom,&len);        
        if(SOCKET_ERROR == result)
        {    
            result = WSAGetLastError();
            TRACE("%d\n",result);
            break;
        }
        else
        {            
            if(tempBuf == "a")
            {
                TRACE("the data111 recv successful!!!\n");            
                SendTo((char *)&tempBuf,sizeof(tempBuf),ntohl(inet_addr(pStr)),13364);                                
            }
            else
            {
                if(tempBuf == "b")
                {
                    TRACE("the data222 send successful!!!!!!!\n");                    
                    SendTo((char *)&tempBuf,sizeof(tempBuf),ntohl(inet_addr(pStr)),13364);                            
                }
            }
        }
        memset(tempBuf,0,sizeof(tempBuf));
    }
    return 0;
}BOOL CUDP_TestDlg::SendTo(const char * inBuffer, long inLength, 
                          DWORD inIP, WORD inPort)
{
    BOOL optval = true;
    SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
    if (sock != INVALID_SOCKET)
    {
        SOCKADDR_IN  addr;
        memset((char *) &addr, 0, sizeof(addr));  
        addr.sin_family      = AF_INET;
        addr.sin_addr.S_un.S_addr = INADDR_BROADCAST;
        addr.sin_port        = htons(inPort);
        setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char *)&optval,sizeof(optval));
        int val = sendto(sock, inBuffer, inLength, 0, 
            (sockaddr *) &addr, sizeof(addr));
        if (val == SOCKET_ERROR)
        {
            TRACE("the data send error!");
            return FALSE;
        }
        else
        {
            TRACE("the data111 send successful!--%d\n",val);
        }
        closesocket(sock);        
        Sleep(60);
        return (val != SOCKET_ERROR);
    }
    return FALSE;
}