一个用完成端口写的服务器程序,在多个客户端连接成功后,要根据每个客户端发来的消息进行判断,再发送给客户端一些信息,问:应该怎么发给这些客户端?也就是说再这些客户端刚登录的时候我应该怎么保存这些客户端?把他的IP和端口号保存下来,然后新建个socket来发?

解决方案 »

  1.   

    在客户端连接时使用GetPeerName()得到ip何port,保存在用户列表中
      

  2.   

    将一个socket和一个客户对象关联在一起,从这个套接口收到数据时,找到对象,对象里存放和某个客户的交互信息,例如交互到哪一步了。从套接口能找到对象,同时客户对象也要建索引,这样在想给另一个客户发送消息时,才知道给哪个套接口发。
      

  3.   

    可以用列表,即用STL;
    typedef CList <SOCKET,SOCKET&> SOCKET_ARRAY;
        SOCKET_ARRAY  m_connectionList;
    当有连接的时候, m_connectionList.AddTail(socket);
    发送的时候:
    for(POSITION pos = m_connectionList.GetHeadPosition(); pos != NULL;)
    {
    SOCKET tempSocket = (SOCKET)m_connectionList.GetNext(pos);
    if (tempSocket == socket)
           continue;
                 SendMsg(tempSocket,&msg);
    }
      

  4.   

    列表,
    STL用list
    头文件是
    #include <list>MFC才是
    CList
      

  5.   

    tcp的话把客户id和socket的指针关联起来发到一个哈希表里,要发给那个客户,直接根据id找到这个socket,发出去。udp的话就要保留id和sockaddr结构。
      

  6.   

    以前不是有人发了一个完成端口写的服务器源代码嘛?他里面用了lookaside技术,其实也可以学学,用来记录登陆了的用户,效率不错的。然后向完成端口发送多个WSAsend请求,直到发到所有用户。
      

  7.   

    哈希表 或者MFC的CMap
    应该是最好的选择,列表功能不太强