分明是你接收包的地方有问题,和WireShark的打开与关闭无关。系统确实收到包了,但是你的应用层没有收到包,再找找问题吧

解决方案 »

  1.   

    调用winpcap的pcap_open_live函数,可以将网卡设置为Promiscuous模式,然后我的程序工作就是正常的,即本机可以接收到本机发送出去的UDP广播。如果不用winpcap,可以把网卡设置为Promiscuous模式么?我用DeviceIoControl设置,GetLastError总是返回1(函数错误)。代码如下:
    DWORD dwReturn = 0 ;
    PNDIS_STATISTICS_VALUE pOidData = (PNDIS_STATISTICS_VALUE) 
    ::GlobalAlloc(GPTR, (sizeof(NDIS_STATISTICS_VALUE) + sizeof(ULONG) - 1));  pOidData->Oid = OID_GEN_CURRENT_PACKET_FILTER;  
    pOidData->DataLength = sizeof(ULONG); 
    *((PULONG)pOidData->Data) = NDIS_PACKET_TYPE_PROMISCUOUS; 
    BOOL bRet = ::DeviceIoControl( 
    hf,IOCTL_PROTOCOL_SET_OID, 
    pOidData, sizeof(NDIS_STATISTICS_VALUE) -1 + pOidData->DataLength, 
    pOidData, sizeof(NDIS_STATISTICS_VALUE) -1 + pOidData->DataLength, &dwReturn, NULL); 
    DWORD gle=GetLastError();
    ::GlobalFree(pOidData);
      

  2.   

    用两个方法解决了此问题:
    1、RAW socket,设置receiveall
    2、安装winpcap,设置网卡为混杂模式