gethostbyaddr的第一个参数是字符串形式的ip地址
(char*)&addr.sin_addr.S_un.S_addr这么写是不行的
用inet_ntoa

解决方案 »

  1.   

     参考
     struct sockaddr_in name;
      int len=sizeof(name);
      getpeername(*m_pCommSocket[iLoop],(sockaddr *)&name,&len);
      CString strIP=inet_ntoa(name.sin_addr);//IP
      int port=htons((name.sin_port));//端口
      

  2.   

    能否说的详细点??
    我是说用API来写的,
    我是说怎么在FD_ACCEPT里面得到的sockaddr_in返回IP
    我事先不知道对方的name
      

  3.   

     switch(lParam)
    {
    case FD_ACCEPT:
    {
    struct sockaddr_in addr;
    int len;
    SOCKET s=accept(this->m_socket,(structsockaddr*)&addr,&len);
    char *a=inet_ntoa(addr.sin_addr);
    HOSTENT *host=gethostbyaddr(a,     sizeof(a),
                                                AF_INET);
                    MessageBox( host->h_name);
    }
    break; 
    不一定行
      

  4.   

    把Jefers(我是一条龙)的代码,应该改为,HOSTENT *host=gethostbyaddr(a,strlen(a),AF_INET);
    试试。应该行的。
      

  5.   

    你需要给len一个值:
    len = sizeof(sockaddr_in);
    我刚才也遇到了类似的问题!
      

  6.   

    switch(lParam)
    {
    case FD_ACCEPT:
    {
    struct sockaddr_in addr;
    int len;
     addr.sin_family = AF_INET ;
     len = sizeof( sockaddr ) ;
    SOCKET s=accept(this->m_socket,(structsockaddr*)&addr,&len);
    MessageBox( inet_intoa( addr.sin_addr ) ) ;
    }
    break;