就是服务端要管理客户端的socket保存socket的ip和端口等然后服务端根据不同socket给不同 客户端的发送不同的信息
怎么保存呀?链表? 如果有例子,最好给出例出说明!谢谢了

解决方案 »

  1.   

    stl::list或者MFC的CList,CArray都可以
      

  2.   

    struct peerinfo
    {
        SOCKET sock,
        std::string ip,
        unsigned int port,
    }PEERINFO;std::list<PEERINFO&> m_peerlist;
      

  3.   

    #include <list>struct peerinfo 

        SOCKET sock; 
    std::string ip;
        unsigned int port;
    }PEERINFO; std ::list <PEERINFO&> m_peerlist;  编译出现错误:error C2059: syntax error : '>'
      

  4.   

    投链表一票,mfc就用coblist。windows编程就#include <list>.然后就list<socket>。
    用链表主要是连接用户的断开时间和顺序是不一定的。
      

  5.   


    我已用这个方法了    现在能保存socket了,可问题又来了比如三个客户端 A B C发送数据分别为DataA ,DataB ,DataC到服务端现在服务端要把三个数据发到三个客户端上个机器上,也说是每个客户端要知道其它两个客户端的数据
    这个是不是要,在客户端发过来的数据包头要加以区分呀?这个具体怎么做呀?
      

  6.   

    不需要加包头啦,你不是记录了socket在链表或者队列或者数组里面嘛,你每一个单独的Socket发送的消息在你服务端接收到后你是知道了,你可以把链表打开,依次循环取出非本次发送效果过来的Socket挨着转发一次消息就OK了
      

  7.   

    加数据包头并不是为了区分是哪个用户发送数据过来的,而是对发送过来的数据进行一种
    封装的协议[自定义的],事实上哪个客户发信息过来,对应的套接字就会有响应,所以
    应该在struct peerinfo 

        SOCKET sock, 
        std::string ip, 
        unsigned int port, 
    }PEERINFO; 
    这里加个信息ID,表明当前发送数据过来的是哪个用户.
      

  8.   


    我加了个ID了
    struct peerinfo
     {
         SOCKET sock,
         std::string ip,
         unsigned int port,
         in ID;
     }PEERINFO;这个ID是可以区分套节字
    但加了还是不能对客户发来的数据加以区分,服务端接收了很多客户端数据,如果不可以区分的话,怎么知道这个是哪发来的,那个数据是谁发来的?不然的话就很乱!
    服务端要发送DataB 和DataC到客户端A去
    我现在想的办法是:用发过来的数据和套节字ID进行关联,意思是说接收的数据也要用那个ID加以区分,就是数据和套节字进行绑定的意思吧
    不知道这个怎么实现!
      

  9.   


    这个方法不错,可实现起来有点难,今天还只学会把套节字加入链表,对list不熟悉。struct peerinfo 

        SOCKET sock, 
        std::string ip, 
        unsigned int port, 
        in ID; 
    }PEERINFO; 
    std ::list <PEERINFO> m_Socketlist; 
    PEERINFO p;
    p.sock=sokcet;
    m_Socketlist.push_back (p);我现在只加了一个sokcet,我在别的地方再放一个ID进去p.ID=1进去,就是要socket 和ID对应起来 
    要实现这样的效果
    std ::list <PEERINFO> m_Socketlist; 
    PEERINFO p;
    p.sock=sokcet;
            p.ID=1;
    m_Socketlist.push_back (p);
      

  10.   

    最好用 vector<SOCKET> ;。呵呵。
      

  11.   

    弄个数组啊  用来保存socket的
      

  12.   

    用数据或者链表来保存客户端的SOCKET我知道,可是,如果客户端中有一个掉线,那我怎么办呢,我是不是要在链表中找到这个SOCKET,然后删除它呢,那我怎么确定是哪个SOCKET呢,并且怎么找到它呢?