您的位置:首页 > 其它

协议寻址

2012-03-06 21:16 281 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息