//工作线程
//hcocket为SOCKET
//在UI线程中开始监听
UINT smtpServerThread(LPVOID pParam)
{
   CString sTemp("helo");
   CSocket serverSocket; 
   serverSocket.Attach(hcocket); 
   CSocket * psmtpConnectSocket=new CSocket;
   if(!serverSocket.Accept(*psmtpConnectSocket))
   {
   delete psmtpConnectSocket;
   return 0;
   } 
   ::AfxBeginThread(smtpServerThread,pParam);
   psmtpConnectSocket->Send((LPCTSTR)sTemp,sTemp.GetLength());
   psmtpConnectSocket->Close();
   delete psmtpConnectSocket;
   
   return 0;
  }
//为什么我的程序只能连接一次,当第二次连接时!serverSocket.Accept(*psmtpConnectSocket)就为
//ture,没法进行第二个连接,程序运行到return 0;时而且还会出错
//大家帮帮忙忙的

解决方案 »

  1.   

    serverSocket.Attach(hcocket); 
    hsocket 是公有的,werversocket attach之后一直没有释放,下次再attach时就失败了,从而倒置accept调用失败
      

  2.   

    CSOCKET不支持后台多多线程
    因为它必须有个窗口发送消息
    放弃CSOCKET,用SOCKET API来写就可以了
      

  3.   

    除了SOCKET api就没有其它办法了吗?
      

  4.   

    我用的也是CSocket,想在accept后为每个客户端新开一个线程,可以第一个客户端刚连接,
    服务器就死掉了,提示说sockcore的问题。是因为CSOCKET不支持后台多线程么?