#include定义与socket有关的宏和函数
#include定义新类型
#include不同的服务对应不同的端口
#include端口号、协议号、IP地址、主机名转换函数
#includeIP地址、网络顺序地址转换函数
#include定义协议号、端口号等
#include与POSIX和XOPEN标准相关的定义
#include定义了wait和waitpid()等函数
#include定义了与信号有关的内容
#include定义错误类型
#include内存动态分配函数
#include与线程有关的内容
#include与系统时钟有关的内容
#include定义IP协议相关的宏、结构等
#include定义ICMP协议相关的宏、结构等
(1) 存储地址和端口信息的sockaddr
Struct sockaddr
{unsigned short sa_family;/*Internet地址簇,AF_INRT*/
Char sa_data[14];/*目的地址和端口信息*/
};
(2) INET协议簇地址结构socketaddr_in,便于访问
Struct sockaddr_in{
unsigned short sin_family;/*取AF_INRT*/
unsigned short sin_port;/*端口号,网络字节顺序*/
struct in_addr sin_addr;/*IP地址,网络字节顺序*/
unsigned char sin_zero[8];/*使用bzero()或memset()全部置0*/
};
(3)32位IPv4地址结构in_addr
Struct in_addr{unsigned long s_addr;};
地址转换函数:
htons()--- host to network short
htonl()--- host to network long
ntohs()--- network to host short
ntohl()--- networ to khost long
struct sockaddr_in adr_inet;//定义变量adr_inet
Int adr_len;
memset(&adr_inet,0,sizeof(adr_inet));//string.h中将地址结构adr_inet清0
adr_inet.sin_family=AF_INET;
adr_inet.sin_port=htons(0);//自动选择合适的端口号
adr_inet.sin_addr.s_addr=htonl(INADDR_ANY);//自动填写所运行机器的IP地址
adr_len=sizeof(adr_inet);
函数:inet_addr()返回的地址已经是按照网络字节顺序,不需要htonl
原型:unsigned long int inet_addr(char *src)
例:struct sockaddr_in ina;
Ina.sin_addr.s_addr=inet_addr(“162.105.32.1”)
注:1、inet_addr()返回的地址已经是按照网络字节顺序,不需要htonl
inet_addr()发生错误时返回-1,编程时需进行错误检查
if((ina.sin_addr.s_addr=inet_addr(“162.105.32.1”))<0)
Cout<<”Address Error!”;
网络地址转换未点分十进制格式
函数:inet_ntoa()
原型:char *inet_ntoa(struct in_addr in)
struct sockaddr_in client;
Coun<<”you got a connection from \n”
<
注:inet_ntoa()de==的参数是struct in_addr,而不是unsigned long
域名服务
函数:grthostbyname()
功能:实现域名转换位网络地址
包含文件:#include
原型:struct hostent *gethostbyname(char *name)
struct hostent{
Char *h_name;//主机名
Char **h_aliases;//主机别名数组
Int h_addrtype;//返回地址类型,常为AF_INET
Int h_length;//地址长度,用字节数表示
Char **h_addr_list;//主机网络地址数组
};
#define h_addr h_addr_list[0]//网络字节顺序的IP地址
struct hostent *he;
struct sockaddr_in server;
He=gethostbyname(“www.math.nankai.edu.cn”);
Server.sin_addr=*((struct in_addr*)he->h_addr);