IPv4寻址
在winsock中,应用程序通过SOCKADDR_IN结构来指定IP地址和服务端口信息,机构如下
- struct sockaddr_in
- {
- short sin_family;
- u_short sin_port;
- struct in_addr sin_addr;
- char sin_zero[8];
- };
sin_family必须使用AF_INET,以告知winsock此时正在使用iP地址族。
sin_port标识服务端口号
sin_addr字段把IPv4地址作为一个4字节的量存储起来,它是无符号长整数的数据类型。
inet_addr是一个实用的函数,可以把一个点分IP地址转换为一个32位无符号长整数
- unsigned long inet_addr(const char FAR *cp);
cp是一个空终止字符串,用于表示IP地址。
字节排序
下面4个API函数将一个数从主机字节顺序转换成网络字节顺序。
- u_long htonl(u_long hostlong);
- int WSAHtonl(SOCKET s, u_long hostlong, u_long FAR *lpnslong);
- u_short htons(u_long hostshort);
- int WSAHtons(SOCKET s, u_short hostshort, u_short FAR * lpsshort);
下面4个函数是上面的逆函数,把网络字节转换为主机字节
- u_long ntohl(u_long netlong);
- int WSANtohl(SOCKET s, u_long netlong, u_long FAR* lphostlong);
- u_short ntohs(u_short netshort);
- int WSANtohs(SOCKET s, u_short netshort, u_short FAR* lphostshort);
演示
- SOCKADDR_IN InternetAddr;
- int nPortID = 5050;
- InternetAddr.sin_family = AF_INET;
- InternetAddr.sin_addr.s_addr = inet_addr("123.123.123.123");
- InternetAddr.sin_port = htons(nPortID);
转载于:https://blog.51cto.com/zcwtop/798598