【UDP】如何区分是广播包,还是普通包?
伪代码如下:
sockaddr_in from,a; WSADATA wsdata; BOOL optval = TRUE; u_short uPort = m_nPort; if(WSAStartup(0x0202,&wsdata) != 0) { CString strErr; strErr.Format(_T("WSAStartup Init failed! Error code:%d"),WSAGetLastError()); AddNote(strErr); _endthreadex(0); return FALSE; } a.sin_family = AF_INET; a.sin_addr.s_addr = 0; a.sin_port = htons(uPort); from.sin_family = AF_INET; from.sin_addr.s_addr = INADDR_BROADCAST; from.sin_port = htons(uPort); int fromlength=sizeof(SOCKADDR); pThread->m_socket = socket(AF_INET,SOCK_DGRAM,0); setsockopt(pThread->m_socket,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval)); bind(pThread->m_socket,(sockaddr *)&a,sizeof(sockaddr_in)); strInit.Format(_T("Port: %d Now waiting for clients..."),uPort); AddNote(strInit); while(true) { nLen = recvfrom(pThread->m_socket,buf,BUF_MAX_LEN,0,(struct sockaddr FAR *)&from,(int FAR *)&fromlength); if(nLen > 0) { // 这里如何区分是广播包,还是普通包? } }