如题.我在本机模拟发送,怎么有数据和没数据WSARecvFrom都一样接收?

解决方案 »

  1.   

    不会哦这么easy的问题没人知道????
      

  2.   


    WSARecvFrom
    WSASendTo
    系列函数调用结果简单说明. 1. 阻塞模式. 
       成功, 返回 0 , lpNumberOfBytesRecvd 参数指出发送或接收多少字节
       失败, 返回 SOCKET_ERROR
    2. 非阻塞模式
       成功, 返回 0 , lpNumberOfBytesRecvd 参数指出发送或接收多少字节
       失败 - 返回SOCKET_ERROR, WSAGetLastError==WSAEWOULDBLOCK, 不算失败. 以后可用 WSAEnumNetworkEvents 或 WaitXXX 或 接收消息确定结果; 返回 SOCKET_ERROR, WSAGetLastError!=WSAWOULDBLOCK. 调用失败3. 重叠模式. 
       返回 0 指明成功, lpNumberOfBytesRecvd 指出传输字节数. 
       返回 SOCKET_ERROR, 并且 WSAGetLastError==WSA_IO_PENDING, 在后来的 WSAGetOverlappedResult 或 完成例程 或 IOCP 中接收结果. 
       返回 SOCKET_ERROR, 并且 WSAGetLastError!=WSA_IO_PENDING, 调用失败.
      

  3.   

    我用的IOCP,像是ICP队列没请空咋办哦?
      

  4.   

    to realdreamer(贫僧来了)我用的IOCP,用WSARecvFrom和MSG_PEEK收数据和地址可行,但是MSG_PEEK flag不会清空IOCP队列的数据,怎么版???
      

  5.   

    TO kimryo:MSDN 里面这么说: MSG_PEEK ... This flag is valid only for nonoverlapped sockets.MSG_PEEK 不能用于 重叠套接字. 你的是 IOCP , 就是要求创建重叠套接字了. 这样你也能成功调用吗?
    另外, 为何要"检查"数据而不直接取出? 真的必须这么做吗
    如果必须这么做, 我想是没有办法清空数据的. 必须再次以不带 MSG_PEEK 来调用才可清空.
      

  6.   

    DWORD dwBytes;
    ioctlsocket(sock, FIONREAD, &dwBytes);
    // dwBytes 就是