利用CArchive与csocket绑定进行进行网络传输。
服务器端的 OnReceive中的代码如下:    cTransObject.Serialize(*m_pInAr);    while(!(m_pInAr->IsBufferEmpty()))
    {
         cTransObject.Serialize(*m_pInAr);
    }当传输数据小的时候一切正常。
启动100个client与服务器连接。每个client每秒向服务器发送10个包,每个包的大小为1k,运行一段时间后,而server的OnReceive不再触发,client的发送包阻塞,
请问各位高手有什么解决办法吗??

解决方案 »

  1.   

    RESOLUTION
    Make sure there is data in the socket's buffer using CAsyncSocket::IOCtl() before attempting to receive. 
    void CMySocket::OnReceive(int nErrorCode)
    {
      // TODO: Do some error handling on nErrorCode  DWORD dwBytes;
      VERIFY(IOCtl(FIONREAD, &dwBytes));
      if (0 == dwBytes) // if nothing to read, return
        return;  do
      {    // Read your data from your CArchive object    CString strData;
        m_pMyArchive >> strData;  } while(!m_pMyArchive->IsBufferEmpty());

    for more details ,see KB articles
    FIX: Using CSocket w/ CArchive Causes Block from Extra FD_READ 
    ID: Q138694