网络编程 -- gethostbyname() 函数解析
最近一段时间在看网络编程的东西,其中的一些函数很是好用,故留下笔记在这。
首先,在了解这个函数之前,我们需要知道一个结构 -- struct hostent
struct hostent {char *h_name;char **h_aliases;int h_addrtype;int h_length;char **h_addr_list;#define h_addr h_addr_list[0]
};
第一个字段: 主机的名字
第二个字段: 主机的别名,可能会有多个
第三个字段: 主机的地址类型,IPV4 或 IPV6
第四个字段: 主机地址的长度
第五个字段: 主机的地址列表(IP地址)
第六个字段: 这是一个宏定义,取得主机的地址列表中的第一个地址
下面,给出一段测试程序,说明这个函数的用法:
#include <stdio.h>
#include <netdb.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>/*
struct hostent *gethostbyname(const char *name);
struct hostent {char *h_name;char **h_aliases;int h_addrtype;int h_length;char **h_addr_list;#define h_addr h_addr_list[0]
};
*/#define DEST "www.google.com"int main(int argc, char **argv, char **environ)
{struct hostent *host = NULL;char **pptr = NULL;char str[255];if ((host = gethostbyname(DEST)) == NULL){perror("host error");exit(1);}printf("h_name : %s\n", host -> h_name);pptr = host -> h_aliases;for (pptr; *pptr != NULL; pptr++){printf("h_aliases : %s\t\n", *pptr);}printf("h_length : %d\n", host -> h_length);switch(host -> h_addrtype){case AF_INET:case AF_INET6:pptr=host -> h_addr_list;/* 将刚才得到的所有地址都打出来。其中调用了inet_ntop()函数 */for(; *pptr != NULL; pptr++)printf("address:%s\n", inet_ntop(host -> h_addrtype, (void *)*pptr, str, sizeof(str)));break;default:printf("unknown address type\n");break;}return 0;
}
运行结果如下图所示:
网络编程 -- gethostbyname() 函数解析相关推荐
- c/c++ 网络编程 getaddrinfo 函数
网络编程 getaddrinfo 函数 解析网址,返回IP地址. 例子: #include <iostream> #include <string.h> #include &l ...
- tcp/ip网络编程--accept()函数返回的套接字
tcp/ip网络编程–accept()函数返回的套接字 套接字:1)套接字是对网络中不同主机的应用进程之间进行双向通信的端点的抽象:一个套接字就是网络进程通信的一端.[1] 2)套接字是用来与另一个进 ...
- UNIX网络编程-listen函数及其包裹函数介绍
UNIX网络编程-listen函数及其包裹函数介绍 函数简介 #include<sys/socket.h>int listen(int sockfd,int backlog);返回:若成功 ...
- linux网络编程常用函数详解与实例(socket--bind--listen--accept)
常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...
- :Android网络编程--XML之解析方式:SAX
任何放置在资源(res)目录下的内容可以通过应用程序的R类访问,这是被Android编译过的,而任何放置在资产(assets)目录下的内容会保持它的原始文件格式,为了读取它们,必须使用AssetMan ...
- UNIX网络编程——fcntl函数
fcntl函数提供了与网络编程相关的如下特性: 非阻塞式I/O. 通过使用F_SETFL命令设置O_NONBLOCK文件状态标志,我们可以把一个套接字设置为非阻塞型. 信号驱动式I/O. 通过使用F ...
- 健壮的网络编程IO函数-RIO包
RIO包 简介 Rio包即为Robust io函数包.包中函数是对Linux基本I/O函数的封装,使其更加健壮.高效,更适用于网络编程. 分析 Rio包由rio_t结构体和系列函数组成. 首先是两个不 ...
- Java 网络编程之 (解析URL)
在 http1.1 协议中,都是基于请求和响应的模式,又是基于 TCP 来进行数据交换的.在 http1.1 中,请求方向远端服务器发送一个请求,请求的内容包括 http 头部信息和可选的内容.然后服 ...
- 网络编程——常用协议解析
** 1.网络基础知识 ** 1.1> 什么是OSI模型 OSI 模型(Open System Interconnection model)是一个由国际标准化组织?提出的概念模型,试图?供一个使 ...
最新文章
- Objective-C中使用方法名调用方法
- android vlc eclipse,在Eclipse下导入vlc-android并编译
- 以太坊服务器是什么_搭建以太坊节点服务器https API
- Linux下安装Jboss
- 剑指offer 合并2个排序的链表
- 哈尔滨工业大学计算机培养计划,哈工大计算机科学与技术专业本科生培养方案.docx...
- git merge与rebase
- 996,别让年轻人累到不觉得累
- 正在迷茫的你,为什么不考虑这份工作呢?
- 求数组中每个数字第一次出现的位置
- SAS 9.13作图—gchart命令
- 【图像处理】【去模糊】图像去模糊之初探--Single Image Motion Deblurring
- 计算机网络课程设计(一)--- VLAN划分和动静态基础配置及其思考
- 批处理 bat for 详解
- 无标号有根树计数与无标号无根树计数
- b250支持服务器cpu,b250m主板上什么cpu
- 经济学中ppf计算机会成本例题,经济学中的PPF是什么
- 回归预测 | MATLAB实现SSA-LSTM和LSTM多输入单输出
- Wireshark使用指南
- TOOLFK工具-在线汉字/字母/人民币/简繁体转换工具