客户端收包线程错误处理

来源:互联网 发布:歼11b知乎 编辑:程序博客网 时间:2024/05/17 02:00


DWORD CDECL CTalkRoomClientDlg::RecvProc(PVOID lpParam){
  int nRet = 0;
  DWORD dwError;
  CString csFmt;
  TCHAR lpBuff[0x100] = {0};

  CTalkRoomClientDlg* pDlg = (CTalkRoomClientDlg*)lpParam;
  while(TRUE){
    if((nRet = recv(pDlg->m_sServer, lpBuff, 0x100, 0)) == SOCKET_ERROR)
    {
      dwError = GetLastError();
      if(WSAEOPNOTSUPP == dwError)
      {
        csFmt.Format("服务器错误主动关闭:%d", GetLastError());
        pDlg->m_ctlListBox.AddString(csFmt);
        break;
      }else if(WSAECONNRESET == dwError){
        csFmt.Format("远程主机强迫关闭了一个现有的连接。:%d", GetLastError());
        pDlg->m_ctlListBox.AddString(csFmt);
        break;
      }
    }else if(nRet == 0){// 接受到0字节,与服务器断开连接
      csFmt.Format("与服务器断开连接:%d", GetLastError());
      pDlg->m_ctlListBox.AddString(csFmt);
      break;
    }

    csFmt.Format(_T("服务器说: %s"), lpBuff);
    pDlg->m_ctlListBox.AddString(csFmt);
  }

  return 0;
}