我在做一个类似聊天室的东西,里面不仅能聊天,客户还能上传文件到服务器,我使用的是用CSocket做多线程文件传输,即在主线程中
hSocket = CSocket.Detach();
在文件传输线程中再
CSocket *newSocket = new CSocket;
newSocket.Attach(hSocket);
但传输完文件后就报错,不知道怎么回事!

解决方案 »

  1.   

    我跟踪发现是ASSERT(m_hSocket != INVALID_SOCKET);
      

  2.   

    具体点说,不是我传输完文件后出错,而是感觉主线程中CSocket不可用了!真正出错的操作是:我成功传完一个文件后,在主线程中再给服务器发送信息的时候就出错了!是不是主线程中CSocket.Detach()后,主线程中的CSocket就没了,还得CSocket回去?
      

  3.   

    执行Detach后,CSocket对象就相当于没有Create一样,不能再使用了。
      

  4.   

    Detach 是分离操作 会将SOCKET分离CSOCKET类
      

  5.   

    嗯,我也感觉是这个问题!有办法再转回去么,也就是说主线程的CSocket和以前一样?
      

  6.   

    再Detach,然后传回给主线程Attach...
      

  7.   

    我在辅助线程里,执行
    SOCKET hSocket = subSocket.Detach; // subSocket为辅助线程里的CSocket
    ((CMainFrame *)pWnd)->MyScoket.Attach(hSocket);
      

  8.   

    你根本不需要这样转来转去,直接用这个CSocket对象就可以。
      

  9.   

    我直接用主线程中的CSocket传输文件一定会出错,网上很多地方都说不能直接用CSocket,msdn也说过不能直接用CSocket
      

  10.   

    你现在的做法用的也是主线程构造的CSocket对象,与直接用原本的CSocket对象相比,差别就是更麻烦一些、更容易出错。
      

  11.   

    感觉这问题相当复杂,难怪网上都找不到用CSocket多线程的源程序!谢了!我再想其它办法吧
      

  12.   

    你先按我说的线程里直接用这个CSocket对象试试。
      

  13.   

    干嘛用Attach和Detach来去,
    聊天和文件传输,应该分成2个socket才好控制。
      

  14.   

    在启动线程的函数中,传递主程序的this指针,在线程函数种,利用this指针使用CSocket对象,将文件分解成1k的发送过去,接收端在组合起来,我发现传递小于35k文件还行,大于35k时会报错!为什么呢?
      

  15.   

    CSocket是界面消息响应
    工作线程容易会出错