1. char buf[1024];
   int nRet = recv(s, buf, 200, 0);
   buf[nRet]= "\0";
   strTemp.Format("%s", buf);
S端发送250个字符,前200 个没问题,后50 个中前20 个是乱码,请问问题出在哪里?2. 
  main()
{
   switch(msg)
   { 
     case FD_ACCEPT:
         HThread = AfxBeginThread(Accept, &Server);
         if (HThread == NULL)
         {
            closesocket(Server);
            WSAClearup();
          }
   }
}UINT Accept(LPVOID lparam)
{
  ClientThread = accept(....);
  AfxBeginThread(Send, &ClientThread);  while(1)
   {
     ...
     FD_READ: recv(...);
     FD_CLOSE: 
       {
         closesocket(ClientThread);
         AfxEndThread(0, TRUE);
       }
   }
return(0);
}我想Accept在收到FD_CLOSE后, 结束Accept线程同时Send线程也应相应结束,但Send线程却没有结束,请问应如何解决?

解决方案 »

  1.   

    1 recv(s, buf, 200, 0)  200这个参数代表了输出缓冲的长度,你应该改成实际的长度即1024。2 AfxEndThread()
      
      这个函数的用法错误,建议楼主使用CreateThread配合信号量来关闭线程,或者用EndThread也可以。
      

  2.   

    1 recv(s, buf, 200, 0)  200这个参数代表了输出缓冲的长度,你应该改成实际的长度即1024。不改也可以,只是代表最大的长度,它只要小于1024就可以了。但正确的做法
    是改成1024
      

  3.   

    char buf[1024];
       int nRet = recv(s, buf, 200, 0);
       buf[nRet]= "\0";               //这里错了,改为buf[nRet] = '\0'; 
       strTemp.Format("%s", buf);
      

  4.   

    CreateThread ,好像很久以前就不推荐用了。