在socket编程中,服务器端accept()等待一个客户端的连接,当连接成功后,accept拷贝客户端的地址信息到sin_addr里面,我们如何从sin_addr取得此客户端的Ip地址和端口号呢?
实际上,当sockaddr_in.sin_family = AF_INET时,sockaddr = sockaddr_in。
据此,我们可以做一下转换,就可以利用 inet_ntoa() 来得到ip地址和端口号了:
//
将sockaddr强制转换为 sockaddr_in
sockaddr_in sin;
memncpy( & sin, & clientAddr, sizoef(sin));
// 取得ip和端口号
sprintf(info.ip, inet_ntoa(sin.sin_addr));
info.port = sin.sin_port;
sockaddr_in sin;
memncpy( & sin, & clientAddr, sizoef(sin));
// 取得ip和端口号
sprintf(info.ip, inet_ntoa(sin.sin_addr));
info.port = sin.sin_port;
port = htons(port);
info.sock = new_fd;
info.sock = new_fd;
htonl()表示将32位的主机字节顺序转化为32位的网络字节顺序 htons()表示将16位的主机字节顺序转化为16位的网络字节顺序(ip地址是32位的端口号是16位的 )