抓取网页

hostent: hostent是host entry的缩写,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。之所以主机的地址是一个列表的形式,原因是当一个主机有多个网络接口时,自然有多个地址。 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]    }; gethostbyname()成功时返回一个指向结构体 hostent 的指针,或者是个空(NULL)指针。 inet_ntoa: char *inet_ntoa(struct in_addr in); struct in_addr { unsigned long int s_addr; } inet_ntoa把类型为struct in_addr的数据转化为"数字+句点"的形式的字符串. inet_ntoa(*((struct in_addr *)host->h_addr_list[0])) struct sockaddr {    unsigned short sa_family; /* address family, AF_xxx */    char sa_data[14]; /* 14 bytes of protocol address */    };   sa_family是地址家族,一般都是“AF_xxx”的形式。通常大多用的是都是AF_INET, 代表TCP/IP协议族。   sa_data是14字节协议地址。   此数据结构用做bind、connect、 recvfrom、sendto等函数的参数,指明地址信息。但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构   sockaddr_in(在netinet/in.h中定义):   struct sockaddr_in {   short int sin_family; /* Address family */   unsigned short int sin_port; /* Port number */   struct in_addr sin_addr; /* Internet address */   unsigned char sin_zero[8]; /* Same size as struct sockaddr */   }; struct sockaddr {   unsigned short sa_family; /* address family, AF_xxx */   char sa_data[14]; /* 14 bytes of protocol address */   };   s_addr按照网络字节顺序存储IP地址   sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向   sockaddr的结构体,并代替它。也就是说,你可以使用sockaddr_in建立你所需要的信息,   然后用进行类型转换就可以了 bzero((char*)&mysock,sizeof(mysock));//初始化   sockaddr_in mysock;   bzero((char*)&mysock,sizeof(mysock));   mysock.sa_family=AF_INET;   mysock.sin_port=htons(1234);//1234是端口号   mysock.sin_addr.s_addr=inet_addr("192.168.0.1");

posted on 2012-07-05 22:19  蓝色守望  阅读(133)  评论(0)    收藏  举报

导航