框架如下:
CSocketListen 从 CSocket 继承
CSocketClient 从 CSocket 继承
又有 CSocketOp 从CSocketClient继承过程如下:
1. 首先是连接:
先初始化系统,然后
void CSocketListen::OnAccept(int nErrorCode) 
{
   if ( nErrorCode == 0 )
   {
      CSocketOp *pCk = new CSocketOp();
      if ( Accept( *pCk ) == TRUE )
       {
            ...  // 成功,把 pCk 加入到连接列表listSck中
        }
   }
}2. 创建一个定时器,1秒钟就向listSck中的所有socket都发送一个ping消息:
xxx::OnTimer( UINT nIDEvent )
{
   if ( nIDEvent == 1 )
   {
      // 发送Ping消息
      for ( int i = 0; i < listSck.GetCount(); i++ )
      {
            CSocketOp *pCk = listSck.GetItem( i );
            if ( pCk != NULL )
             {
                     pCk->Send( ... );   // 发送消息
              }
       }       ... // 统计发送的情况,即发送到的IP地址。结果显示,在列表中的所有连接都有发送消息
    }
}3. 在收到关闭消息时,就把自己从列表中删除:
void CSocketOp::OnClose(int nErrorCode) 
{
   ... // 把自己从listSck中删除。经验证,这里操作是没有错误的
}问题:
当一个客户端连上来之后,我发送ping消息,成功,客户端正确接收
第二个客房端连上来之后,在timer1中循环发送给多个客户端,显示成功,但只有最新连上来的客户端上才实际收到ping消息
在第一个收不到消息后,主动断开连接,然后重新连上来。这时ping消息就只有这一个能实际收到了(是最新的一个连接),其它的就又会收不到消息,从而断开后重连,这样反复
为什么同一时间只有一个客户端能收到消息呢?