如题,有A和B两个相互通信的程序....A可能向B发送不定的几个数据包...在B程序中怎么判断是否还有数据包要接收?如果A只向B发了一个数据包...哪么B收到后就可以立即处理,但要是A向B发送了2个数据包,当B收到一个数据包后怎么判断是否还有没有接收的数据包?要是再用recv接收,如果又只有1个数据包,程序将无限等待(阻塞模式).发送和接收的数据没有任何特征!无法从数据上判断!!求高手为偶解答,偶不胜感激!!!

解决方案 »

  1.   

    先用Select来判断网络是否有数据,然后再用recv来接收(这样就不会无限等待了)
      

  2.   

    最好将网络通信的弄在一个独立的工作线程中,这样不至于影响UI响应。
    一直recv,直到recv返回0为此。
      

  3.   

    m_socket是SOCKET
    assert(m_socket != NULL);
    FD_SET fd = {1, m_socket};
    TIMEVAL tv = {nSecs, 0};
    if(select(0, &fd, NULL, NULL, &tv) == 0) 
    {
    return -2;//超时,没有数据
    }int nBytesReceived;
    if((nBytesReceived = recv(m_socket, lpszBuf, nSize, 0)) == SOCKET_ERROR) 
    {
    return -1;
    }

    nSecs可是设成2或3秒,这样超过3秒没有数据就返回,不会长时间堵塞