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