int nSize=0;
//不断地接收S方的数据
m_strData = (char *)HeapAlloc(GetProcessHeap(), AP_ZERO_MEMORY, m_dataSize);
unsigned long recvData=0;
while(nSize!=m_dataSize)
{
if (nSize>m_dataSize)
return false;
if (0!=ioctlsocket(m_threadobj->SocketList->next->next->s,FIONREAD, &recvData))
return false;
if (recvData!=0)
{
int ret=recv(m_threadobj->SocketList->next->next->s,m_strData + nSize,SEND_MAX_SIZE,0);
if ((ret == 0)||(ret==SOCKET_ERROR))
return false;
else
{
nSize =nSize + ret;
}
}
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
Sleep(1);
}
程序中源代码如上,用来接收数据,m_dataSize是需要接收的长度,经确认,服务器发回来的数据长度却是为m_dataSize,而我用nSize来累加接收到的数据,可后来却发现,数据小时没问题,数据量大时会出现nSize大于m_dataSize的情况,请问有人知道是为什么吗?

解决方案 »

  1.   

    int nSize=0;
    //不断地接收S方的数据
    m_strData = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, m_dataSize);
    unsigned long recvData=0;
    while(nSize!=m_dataSize)
    {
      if (nSize>m_dataSize)
        return false;
      if (0!=ioctlsocket(m_threadobj->SocketList->next->next->s,FIONREAD, &recvData))
        return false;
      if (recvData!=0)
      {
        int ret=recv(m_threadobj->SocketList->next->next->s,m_strData + nSize,SEND_MAX_SIZE,0);
        if ((ret == 0)||(ret==SOCKET_ERROR))
          return false;
        else
        {
          nSize =nSize + ret;
        }
      }
      MSG msg;
      while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
      {
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
      }
      Sleep(1);
    }上面的排的不整齐,重新排一下
      

  2.   

    int nSize=0 放在循环里面