已经提出过了,但好像没人回答,再提,回答了连那边的分一起给。我的类组成是这样的,一个CAccsocket(用于服务器与客户端通信),一个CServerocket,一个CClientSsocket.三个类都是派生于CAsyncSocket。
在CServersocket中的OnAccept
void CServersocket::OnAccept(int nErrorCode)
{CAccsocket *pSocket=new CAccsocket();
if(Accept(*pSocket))
{
pSocket->AsyncSelect(FD_READ| FD_CLOSE);
}
else
delete pSocket;
CAsyncSocket::OnAccept(nErrorCode);
}有一点想不清楚,有多个客户端向服务器发送了连接请求后,服务器如何同时处理多个连接(在OnAccept里只有一个变量pSocket,需要先定义一个CAccsocket数组吗)?

解决方案 »

  1.   

    这个地方是排队处理的,在Listen中可以指定队列中的最大排队数量,默认是5
      

  2.   

    如果是一个客户端已经和服务器建立了连接并正在通信,那么再有一个客户端向服务器发送连接请求,那么服务器怎么处理,因为在服务器端只有一个CAccsocket对象。
      

  3.   

    只要CAccsocket对象没有被释放,它就可以接收,发送数据,不影响accept
      

  4.   

    只有一个CAccsocket对象,它怎么能同时与多个客户端连接通信,并能知道与它通信的是哪一个客户端套接字呢?
      

  5.   

    每一次accept都new一个新的对象了
      

  6.   

    哎呀,这都给忘了,真是晕倒,thank you.那么new了之后服务器要在什么时候delete呢,好像有点问题哦,因为不知道什么时候不用了
      

  7.   

    可以在socket的close消息里释放,不过最好应该把指针记录下来,如果需要提前释放可以用到
      

  8.   

    但是,对于CAccsocket对象来说,它自己并不能知道指针pSocket,它怎么来delete呢?
      

  9.   

    过会结贴,你到http://community.csdn.net/Expert/TopicView3.asp?id=5242373去一下,那边的分一起给你