是很现实的一个问题,那位高人,花点时间帮我解决一下,感激不尽
我即使设置足够大的缓冲,也只能收到8640bit,,

解决方案 »

  1.   

    你不要指望一次收到所有的数据。
    最好是分次接受,并且将每次接收的数据量垒加。
    如果最后的接收数据量记数等于要接收的,那么肯定不会错了。如:nTotalReceive=0;
    do
    {
      nReceive=m_socket.Receive(m_srcBuffer+nTotalReceive,1024);
      nTotalReceive+=nReceive;
    }
    while(nTotalReceive<nTotal && nReceive>0)
      

  2.   

    循环接收。
    BOOL CHSPacket::ReadBody(CHSConnection *pConnection)
    {
    ASSERT(pConnection);
    CHSSocket *pSocket = pConnection->GetSocket();
    ASSERT(pSocket);

    if ( m_nLength > 0 && m_PacketStatus >= PS_READHEADEROK )
    {
    if ( m_pData == NULL )
    {
    try
    {
    m_pData = new TCHAR[m_nLength];
    // 清 0
    ZeroMemory(m_pData, m_nLength); m_nBytesRead = 0;
    m_PacketStatus = PS_READINGBODY;
    }
    catch (CMemoryException *e)
    {
    e->ReportError();
    e->Delete();
    return FALSE;
    }
    } ASSERT(m_pData); int nBytesRead = pSocket->Receive(m_pData + m_nBytesRead, m_nLength - m_nBytesRead);
    if ( SOCKET_ERROR == nBytesRead )
    {
    if (WSAEWOULDBLOCK == pSocket->GetLastError())
    {
    // 继续进行接收
    pSocket->AsyncSelect( FD_READ );
    }
    return FALSE;
    }

    m_nBytesRead += nBytesRead;
    if ( m_nBytesRead < m_nLength )
    {
    pSocket->AsyncSelect( FD_READ );
    return FALSE;
    } m_PacketStatus = PS_READBODYOK;

    }
    return TRUE;
    }
      

  3.   

    非常感激还有个问题,socket中的阻塞机制是怎么样的啊,