case arg.LIAO:
         POSITION pos1;
 SOCKADDR_IN tSock1;
            arg>>datanode.userid;
    arg>>datanode.liao;

for(   pos1   =   m_OnlineLink.GetHeadPosition();   pos1   !=   NULL;)
{
if( OnMainDB(datanode) )
  {
argsend<<arg.LIAOBACK;
argsend<<datanode.nickname;
argsend<<datanode.liao;
sendto(pIOData->m_sock,argsend.m_buf,sizeof(argsend.m_buf),flag,
(SOCKADDR *)&(m_OnlineLink.GetAt(pos1).saddr),sizeof(SOCKADDR));
break;
  }
}
以上是服务端返回客户端的主要代码,我做的是多客户端的,问题出在,我开起2个客户端后,第一个进的发信息,第一和第2都能看见,第2发的只有自己能见;开起第3个客户端后,第2和第3能见,第1看不见,此时第2发的还是只能自己见,第1发的第1,2能见,第3看不见这是怎么回事

解决方案 »

  1.   

    if( kind==argrecv.LIAOBACK )
    {
                    CString tstr;
    argrecv>>g_node.nickname;
    argrecv>>tstr;
    tstr=g_node.nickname+":"+tstr;
    GetDlgItem(IDC_STATIC_liao1)->SetWindowText(tstr);
    }
    这是我客户端接收聊天信息的主代码
      

  2.   

    接收代码应该没什么问题
    估计问题在这
    for( pos1 = m_OnlineLink.GetHeadPosition(); pos1 != NULL;)
    {
    if( OnMainDB(datanode) )
    {
    下个断点调试看里面的循环有没有出错
    还有,OnMainDB这个是拿来干啥的?
    是不是因为这个而没有进入到发送代码那里
    慢慢调试~~
      

  3.   

    OnMainDB是连接数据库用的,应该有用,不然客户端是信息都显示不出来的
      

  4.   

    哎,用CPtrArray来保存客户端指针就可以了
    一个GetSize和GetAt就可以把客户端列表遍历出来~~
      

  5.   

    用现有的SDK吧:http://www.anychat.cn/faq/,有Demo程序的VC++源代码可供参考的。