更多精彩内容,请见:http://www.16boke.com
by zxy,Java/C++编程交流群:168424095
(1)WSAStartup()函数用于初始化Windows Sockets,并返回WSADATA结构体。只有调用WSAStartup()函数后,应用程序才能调用其他WindowsSockets API函数,实现网络通信。
函数原型:
intWSAStartup(
INWORD wVersionRequested,//Windows Sockets DLL规定调用者可以使用的WindowsSockets规范的版本,为WORD类型。高位字节中存储副版本号,低位字节中存储高版本号。可以使用MAKEWORD()函数返回该值。
OUTLPWSADATA lpWSAData//指向WSADATA结构体的指针,用于接收Windows Sockets执行的数据
)
成功返回0
(2)IP地址的表示形式
(2.1)网络字节顺序格式 TCP/IP规定,低位存储地址中保存数据的高位字节,数据传输顺序是由高位至低位进行的。
用结构体in_addr来保存网络字节顺序格式的IP地址,定义如下:
structin_addr{
union{
struct{u_chars_b1,s_b2,s_b3,s_b4;} S_ub_b;//由4个u_char组成的主机格式IP地址
struct{u_shorts_w1,s_w2;}S_un_w;//由2个u_short组成的主机格式IP地址
u_longS_addr;//以u_long变量表示的主机格式IP地址
}S_un;
inet_addr()、inet_ntoa()实现点分法IP地址字符串和网络字节顺序格式IP地址之间的转换
inet_addr()将点分法IP地址字符串转换为in_addr结构体中的IP地址格式,函数原型:
unsignedlong inet_addr(
constchar* cp//点分法IP地址字符串
);
正确,返回unsignedlong类型的网络字节顺序格式IP地址,错误返回INADDR_NONE
inet_ntoa()将in_addr结构体中IP地址转换为点分法IP地址字符串,函数原型:
charFAR* inet_ntoa(
structin_addr in//要进行转换的IP地址
);
返回char*类型的IP地址。
(2.2)主机字节顺序格式
用htonl()、htos()、ntohl()、htohs()实现主机字节顺序格式和网络字节顺序格式的转换。
htonl()将u_long类型的主机字节顺序格式IP地址转换为TCP/IP网络字节顺序格式,函数原型:u_long htonl(u_longhostlong);
htons()将u_short类型的主机字节顺序格式IP地址转换为TCP/IP网络字节顺序格式,函数原型:u_short htons (u_short hostshort);
ntohl()将u_long类型的TCP/IP网络字节顺序IP地址转换为格式主机字节顺序格式,函数原型:u_longntohl (u_long netlong);
ntohs()将u_short类型的TCP/IP网络字节顺序IP地址转换为格式主机字节顺序格式,函数原型:u_shortntohs (u_ short netlong);
更多精彩内容,请见:http://www.16boke.com