void CSocketServer::OnAccept(int nErrorCode) 
{
// TODO: Add your specialized code here and/or call the base class

CSocket::OnAccept(nErrorCode);
if(m_pDlg)
{
m_pDlg->ProcessAccept();
}
}void CXaInfoServerDlg::ProcessAccept()
{
CSocketClient* pSocketClient=new CSocketClient(this);
if(m_pSocketServer->Accept(*pSocketClient))
{
m_SocketClientList.AddTail(pSocketClient);
}
else 
{
delete pSocketClient;
}
}
一个基于C/S的模式的文件传输系统,此代码可以实现多用户登录,但是但某一用户传输大文件的时候,
服务器就不能及时响应其他用户发送的消息了。
我想着是发送大文件时 启动一个线程,但是老处assert错误,上网一查,原来CSocket只能在同一个线程中
创建,发送和接收操作,所以另启动一个线程发送文件是不可行了。请问我应该如何设计才可以实现多用户下载文件呢。

解决方案 »

  1.   

    不用CSocket,直接写socket的函数来完成,可能更方便些。产生多线程机制,一个主线程始终监听端口号,当有一个连接时你就产生一个线程与其进行通信。这样就可以实现多用户连接。这是个最简单的方法。
      

  2.   

    CSocket不能在多个线程中使用,楼主你的问题,别人以前已经问过了,你可以看看以下的连接,也是csdn上以前问的
    http://topic.csdn.net/t/20030903/22/2221050.html
      

  3.   

    应该是listen, accept机制来处理并发连接。
      

  4.   

    Detach,传递到线程中再Attach...
      

  5.   

    用异步选择方式重载OnReceive函数接收。
      

  6.   

    如果用线程,可以把CSocket对象中的socket句柄传给线程。
      

  7.   

    TO 楼主 我采用的是完成端口的方式实现的。 C----accept---->S 
    客户端连接服务器端 
    C <---port-------S 
    服务器端返回一个端口给C,同时启动一个AP bind port 
    C----accept use port----->s.Ap 
    数据传输 end 
    C----close port 
    s.AP ---close -----------
    我的资源中的 版本控制安装就是这种方式实现的。
      

  8.   

    CSocket 进入线程detach分离出去,传第handle,线程处理函数时用attach绑回来,然后之后就是怎么处理线程函数里面的socket的事
    CSocket多线程最容易就碰到Assert(---)错误,很莫名其妙,最好还是用socket apigl
      

  9.   

    以上方法都不太可行,出错几率很大。最终解决办法,采用socket多线程
    放弃使用CSocket