我建立了一个线程: UINT ScanPort(LPVOID pParam);
如下:
UINT ScanPort(LPVOID pParam)       // <注: 编译一切真确>

     CSocket  sock;
     if(!sock.Create()) // 运行程序时,这句为什么不能通过??
     {                  // 而这句不用多线程则没问题!         AfxMessageBox("Can't create socket !");  return 0;      
     }
     if(!sock.Connect(address, port))
     {
     AfxMessageBox("fail to connect !"); return 0; 
      }
      sock.Close();      return 0;
}
// 有劳各位,给分了。

解决方案 »

  1.   

    我可以的呀,是不是你的sock用完了,你在Connect出错时,把sock关掉呀
      

  2.   

    ScanPort线程是什么时候调用的?
      

  3.   

    还有个可能,有没有AfxSocketInit
      

  4.   

    To xiaoqiqixiao(七七):1. 程序还没有到connect就出错了;是create都有错呀?!
    2. 我在程序主函数的InitInstance中初始化sock:
         AfxSocketInit();
    ------------------------------------------------------------
    To yanhuahui(小辉)
     
       有一个"connect"按钮控件,我按下他时就调用此线程:
       void OnConnect()
       {
            AfxBeginThread(ScanPort, NULL);
       }
      

  5.   

    建议使用CSocket* sock;
            CSocket* sock;
            if(!sock->Create())
            {
                   delete sock;
                   return;
             }
             else
             {
                  //do something;
                  sock->close();
              }
              delete sock;
              return;
      

  6.   

    VC6.0在线程中使用socket存在bug,需要安装补丁。
      

  7.   

    if(!sock.Create()) // 运行程序时,这句为什么不能通过??
    {                  // 而这句不用多线程则没问题!
          //添加 int nLen = GetLastError();看看是什么错误
             AfxMessageBox("Can't create socket !");  return 0;      
     }
      

  8.   

    To zhaolaoxin():   请问在哪下载? 叫什么? 谢谢。
      

  9.   

    在线程中会捕获一错误信息,用catch(...)可以得到.
    可以在多线程中传递Socket的句柄,达到目的.
      

  10.   

    个人经验,AfxSocketInit() 应该在子线程里重新调用