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;
}

 

转载于:https://www.cnblogs.com/LarryGen/p/5413634.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值