getsockname和getpeername

int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);  // 获取与某个套接字关联的本地协议地址

int getpeername(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);  // 获取与某个套接字关联的外地协议地址

struct sockaddr
{
       unsigned short  sa_family;     //地址族, 一般为AF_INET
       char            sa_data[14];   //14字节的协议地址
};

struct in_addr {
      in_addr_t s_addr;
};

struct sockaddr_in    
{
       short int                sin_family;    //地址族
       unsigned short int       sin_port;      //端口号
       struct in_addr           sin_addr;      //ip地址
       unsigned char            sin_zero[8];   //填充    
};

void get_name(int sockfd)
{
    struct sockaddr_in host_sa;
    struct sockaddr_in peer_sa;
    socklen_t len = sizeof(host_sa);
    getsockname(sockfd, (SA*)&host_sa, &len);
    char *ip = inet_ntoa(host_sa.sin_addr);
    cout<<ntohs(host_sa.sin_port)<<endl;
    cout<<ip<<endl;

    getpeername(sockfd, (SA*)&peer_sa, &len);
    char *ip = inet_ntoa(peer_sa.sin_addr);
    cout<<ntohs(peer_sa.sin_port)<<endl;
    cout<<ip<<endl;
}

 

posted @ 2016-04-20 17:36  LarryKnight  阅读(395)  评论(0编辑  收藏  举报