我正在学习CSocket,我在网上下载了一个聊天室的例子。服务器例子里有两个子类ListeningSocket、ClientSocket,部分代码如下.
1。OnAccept是自动触发的吗?
2。例子里每次增加一个客户端,就new CClientSocket(this),请问这种方式对客户数量有限制吗?
3。如果多个客户端同时往服务器send,我需要在程序里处理先后顺序还是csocket可以自动处理?
void CListeningSocket::OnAccept(int nErrorCode) 
{

CSocket::OnAccept(nErrorCode);
m_pDoc->ProcessPendingAccept();
}
bool CMYBBSDlg::initsock()
{
m_pSocket=new CListeningSocket(this);
if (m_pSocket->Create(2000) != TRUE)
return FALSE; if (m_pSocket->Listen() != TRUE)
return FALSE;
return TRUE;
}
void CMYBBSDlg::ProcessPendingAccept()
{
CClientSocket * pSocket = new CClientSocket(this); if (m_pSocket->Accept(*pSocket) != TRUE)
{
delete pSocket;
return;
}
m_connectionList.AddTail(pSocket);
}

解决方案 »

  1.   

    1、当client执行Connect函数时,server的OnAccept就触发了。
    2、理论上讲是没有限制的,但实际上考虑到处理器的速度、内存的大小,还是有限制的。
    3、tcp/ip会在底层自动处理的,现在的CPU速度都相当的快,相对于网络速度来讲,这不是问题。
      

  2.   

    I guess total number of clients would be probably depends on the port number availability. Every time the client send msg to server the OnReceive() member function would be called and you can overwrite it to suit your purpose. hope this help.If you have time do a read about the TCP/IP which will make you a lot clearer.
      

  3.   

    1.OnAccept是自动触发
    2.理论上没有限定
    3.没有先后顺序
      

  4.   

    如果多个客户端同时往服务器send,服务器是否会丢失数据?