忙和了一天,试来试去 终不得成功 只好请教各位了
n个客户端连接到了服务器端上。OnAccept()里 将客户端套接字m_sConnect存入 CPtrList里 。
如:
OnAccept()中.....
m_conList.AddTail(&m_sConnect);取出使用时:CMySocket *pSocket = (CMySocket *)m_conList.GetAt(...);我也可以在服务器端程序上给每个客户端发送信息,是取出CPtrList里 的m_sConnect向各个客户端发送的。
问题是:
  在客户端上向服务器端发送信息时,服务器端收不到  服务器端的 OnReceive()里 该怎样写?跟踪了一下,当客户端发送信息时,服务器端上根本就没有受到 OnReceive()消息

解决方案 »

  1.   

    两个建议:
    一,用SOCKET API。
    二,下载MyICQ源码。http://www.csdn.net/cnshare/soft/openfile.asp?kind=1&id=11417
      

  2.   

    服务端口侦听到一个客户请求连接后,应该为此客户连接建立一个针对此客户的端口(端口号由系统给出),由这个端口与客户通讯,原侦听端口继续侦听:
    OnAccept()中
    //这边加入创建新连接的程序
    .....
    m_conList.AddTail(&m_sConnect);
      

  3.   

    在 OnAccept()里面这样写:
        CMySocket *pSock=new CMySocket;
        pSock=Accept();
        m_conList.AddTail(pSock);//  不用时将所有的pSock指向的SOCKET delete
    //  然后再m_conList.RemoveAll();    这样做和你的代码的区别在于,你每接收一个,都把以前的给冲了,
    也就是说,你的m_conList里保存的指针都指向了一个对象。    另外,你的CMyScoket类要重写OnReceive()和OnSend()。
      

  4.   

    icelight(icelight)
    sjrhpy(风中杨柳) 
    shiyongfan(追梦人)  おはようございます。多谢三位热情的朋友 今天我要好好地试一下 大家都只侧重于OnAccept()函数 难道说关键是OnAccept() ?  只要这个函数写得对,那么OnReceive()就能保证肯定好用吗?现在,我OnAccept()里是按照大家说的,new了一个新的Socket指针,然后Accept(),然后将它保存在 CPrtList型的m_conList里了。如果有n个客户,这个链表里就会有n个指针, 可是它们都在链表里,怎样用它们在OnReceive()里收到对应自己的客户端发来的消息?(注,它在链表里放着,当前一个pSok指针不可能 "同时" 指向所有的链表里的Socket)今天我一定要解决这个问题!! 再次感谢三位的关心。kinsan より
      

  5.   

    服务端口侦听到一个客户请求连接后,应该为此客户连接建立一个针对此客户的端口(端口号由系统给出),由这个端口与客户通讯,原侦听端口继续侦听:
    OnAccept()中
    //这边加入创建新连接的程序
    .....
    m_conList.AddTail(&m_sConnect);To sjrhpy(风中杨柳):
    你说的我以经实现了, 三个客户端连到了服务端上, 且服务端上可取出各个Socket(从m_conList)给各个客户端发送数据了。  问题是:这样后,服务端上是怎样知道客户端发来消息呢?即:当有客户端发信息时 , 服务端上怎样才能收到 OnReceive消息? 至少要收到OnReceive消息服务端才能进行操作嘛 现在任凭客户端哭天喊爹,服务端仍旧没有任何反应 (泣)
      

  6.   

    在这个函数中做:int CMySocket::Receive(void* lpBuf, int nBufLen, int nFlags) 
    {
    // TODO: Add your specialized code here and/or call the base class
        for(int i=0;i<m_conList.GetCount();i++)
        {
              CMySocket *pSocket = (CMySocket *)m_conList.GetAt(m_conList.FindIndix(i));
              if(pSocket->m_hSocket == m_hSocket)
              {
                    //添加你的处理代码
              }
         }
    }    return CSocket::Receive(lpBuf, nBufLen, nFlags);
    }
      

  7.   

    m_conList.AddTail(&m_sConnect);
    m_conList.AsyncSelect( FD_READ);
    試試