服务器端如何识获取客户端的IP地址然后显示在列表控件中,请问该怎么做。另外列表控件其他列需要得到序号,设备地址。这两项得是唯一值

解决方案 »

  1.   

    SOCKET accept(
      SOCKET s,
      struct sockaddr* addr,
      int* addrlen
    );看第三个参数;
      

  2.   

    int* addrIP 建议用双向链表,效率比较高/* 双向链表存储结构 */
    typedef struct addrIP 
    {
      ElemType data;
      struct DuLNode *prior,*next;
    }addrIP ,*DuLinkList;void InitList(DuLinkList *L)
    { /* 产生空的双向循环链表L */
      *L=(DuLinkList)malloc(sizeof(addrIP));
      if(*L)
        (*L)->next=(*L)->prior=*L;
      else
        exit(OVERFLOW);
    }
      

  3.   

    一看楼上的就是高手,数据结构学得好,不过你这段代码一点都用不上。因为是在监听时发现有IP连过来了,就把这个IP在服务端显示出来。
      

  4.   

    SOCKET   s; 
    s   =   socket(AF_INET,   SOCK_STREAM,   IPPROTO_IP); 
    sockaddr_in   tcpaddr; 
    int   port   =   5050; 
    tcpaddr.sin_family   =   AF_INET; 
    tcpaddr.sin_port   =   htons(port); 
    //tcpaddr.sin_addr.S_un.S_addr   =   htonl(INADDR_ANY); 
    tcpaddr.sin_addr.S_un.S_addr   =   inet_addr( "127.0.0.1 "); 
    if   (bind(s,   (LPSOCKADDR)&tcpaddr,   sizeof(tcpaddr))   ==   SOCKET_ERROR) 

    MessageBox(NULL,   CString( "邦定错误! "),   _T( "Error "),   MB_OK); 
    return   0; 

    if   (listen(s,   10)   ==   SOCKET_ERROR) 

    MessageBox(NULL,   CString( "监听错误! "),   _T( "Error "),   MB_OK); 
    return   0; 

    SOCKET   s1; 
    sockaddr_in   addrClient; 
    ZeroMemory(&addrClient,   sizeof(addrClient)); int nLen = 0; 
    s1 = accept(s,   (struct sockaddr  *)&addrClient,   &nLen); 
    TRACE( "对方IP:%s ",       inet_ntoa(addrClient.sin_addr)); //这个就是客户端IP地址
    if(s1  ==  -1) 

        TRACE( "%d\n ",   WSAGetLastError()); 
        MessageBox(NULL,   CString( "接受数据错误! "),   _T( "Error "),   MB_OK); 
        return   0;