我在主进程中启动一个线程来accept,在客户端启动一个线程来connect,当服务器的accept线程解除挂起后继续receive的话,就能使accept产生的socket继续有效,如果再重新开启一个线程进行接受管理的话就会报非法错误,即accept产生的socket已被释放。注:被连接的socket是在view类中声名的。如何解决连接好的socket的单独处理?而不和accept在一起。

解决方案 »

  1.   

    不要使用CAsyncSocket和CSocket进行多线程编程——这是许多人经验的结果,包括我在内
      

  2.   

    给你段伪代码。while((new_socket = accept(main_socket...))!=-1)
    {
     创建线程管理new_socket;
    }
      

  3.   

    如果使用多线程的话,建议不要在线程间传送CSocket的句柄在多线程中最好用winsock来处理,会更好控制一些
      

  4.   

    使用CSocket最好用CSocketFile进行传输使用SOCKET最好使用多线程或是事件