Wi n s o c k中,应用通过S O C K A D D R _ I N结构来指定I P地址和服务端口信息,该结构的格式如下:


struct sockaddr_in
 
{
 
short sin_family;
 
u_short sin_port;
 
struct in_addr sin_addr;
 
char sin_zero[8];
 
};
 
s i n _ f a m i l y字段必须设为A F _ I N E T,以告知Wi n s o c k我们此时正在使用I P地址家族。
 
准备使用哪个T C P或U D P通信端口来标识服务器服务这一问题,则由s i n _ p o r t字段定义。如果发现要绑定的端口已经被占用会返回一个WSAEADDRINUSE错误。
 
sin_addr字段用于把一个IP地址保存到一个4字节无符号整数类型中
 
sin_zero只充当填充项的责任,以使SOCKADDR_IN结构和SOCKADDR结构的长度一样
 
(inet_addr函数可以把一个点式的IP地址转换成一个32位的无符号长整数,定义为:
 
unsigned long inet_addr(
 
const char FAR* cp
 
); //cp字段是一个空终止字符串,它接受通常使用的点格式 
 )
 
特殊地址:对于特定情况下的套接字行为,有两个特殊I P 地址可对它们产生影响。特殊地址
I N A D D R _ A N Y允许服务器应用监听主机计算机上面每个网络接口上的客户机活动。一般情况下,在该地址绑定套接字和本地接口时,网络应用才利用这个地址来监听连接。如果你有一个多址系统,这个地址就允许一个独立应用接受发自多个接口的回应。特殊地址I N A D D R _ B R O A D C A S T用于在一个I P网络中发送广播U D P数据报。要使用这个特殊地址,需要应用设置套接字选项S O _ B R O A D C A S T。 
字节顺序一共有两种方法表示多字节编号,主机顺序:从最无意义到最有意义的顺序,INTER 86处理器用的就是这种方式。网络顺序:从最有意义到最无意义。互联网标准。
 
将一个数从主机顺序转换为网络顺序的函数有:
 
u_long htonl(u_long hostlong);
 
int WSAHtonl(
 
SOCKET s;
 
u_long hostlong; //主机顺序的4字节数
 
u_long FAR* lpnetlong //返回的网络字节顺序
 
);
 
u_short htons(u_short hostshort);
 
int WSAHtons(
 
SOCKET s;
 
u_short hostshort; //主机顺序的2字节数
 
u_short FAR* lpnetshort //返回的网络字节顺序
 
);
 
把网络字节顺序转换为主机字节顺序的函数有:
 
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
 
);
 
winsock提供了两个函数g e t h o s t b y n a m e和WSAAsynGetHostByName用来支持名字解释,把主机名转换为HOSTENT结构如下
 
struct hostent
 
{
 
char FAR* h_name; //主机名
 
char FAR* FAR* h_aliases; //由主机备用名组成的空终止数组
 
short h_addrtype; //返回的地址家族
 
short h_length; //对h_addr_list字段中每一个地址定义字节长度
 
char FAR* FAR* h_addr_list; //由主机IP地址组成的空终止数组(一个主机名对应多个地址)
 
};
 
struct hostent FAR* gethostbyname(
 
const char FAR* name
 
); 
 
HANDLE WSAAsyncGetHostByName( //gethostbyname的异步版本
 
HWND hWnd; //接受消息的窗口句柄
 
unsigned int wMsg; //接收到的窗口消息
 
const char FAR* name; //主机名
 
char FAR* buf; //只想接收HOSTENT数据的那个数据域大小应设为MAXGETHOSTSTRUCT
 
int buflen
 
);
 
g e t h o s t b y a d d r和WSAAsynGetHostByName API函数,它们是为获得与I P网络地址相应的主机信息而设计的。
 
struct HOSTENT FAR* gethostbyaddr(
 
const char FAR* addr; //指向IP地址的指针按网络字节顺序排列
 
int len;
 
int type //指定AF_INET值
 
);
 
g e t s e r v b y n a m e和W S A A s y n c G e t S e r v B y N a m e函数,便可获得已知服务的端口号。
 
struct servent FAR* getservbyname(
 
const char FAR* name;
 
const char FAR* proto
 
);
 
红外线..............
 
IPX/SPX.............
 

  NetBIOS............. 

 
AppleTalk(苹果公司)......
 
ATM(异步传输模式协议).....