前一篇已经介绍了最基本的网络数据结构。这篇介绍一下获取主机信息的函数

  举个例子,想要通过代码的方式从百度获取当前的时间,怎么做?我们不知道百度的IP地址啊,这代码怎么写?还好,Linux提供了一些API,使得IP与域名之间的转  换变得非常简单。这就是gethostbyname()、gethostbyaddr()。

  首先介绍一个结构体:struct hostent.

  struct hostent {

    char *h_name;          /*主机的正式名称  比如www.google.com*/

    char **h_aliases;       /*主机的别名*/

    int   h_addrtype;        /*主机地址的地址类型   IPv4/IPv6*/

    int   h_length;

    char  **h_addr_list;    /*IP地址列表,  像百度  一个域名对应多个IP地址*/

  };

#include <netdb.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
/*
struct hostent {
char *h_name; official name for the host
char **h_aliases; nake names for the host
int h_addrtype; addrres type of host ipv4 or ipv6
int h_length; length of the addrres
char **h_addr_list; list of addrres
}
*/ int main(int argc, char *argv[])
{
int i = ;
char ip[]={};
char *host = "www.sina.com.cn";
struct hostent *ht = NULL;
ht = gethostbyname(host);
if (ht) {
printf("Name: %s\n",ht->h_name);
printf("Type: %s\n",ht->h_addrtype==AF_INET?"AF_INET":"AF_INET6");
printf("Length of the host: %d\n",ht->h_length); for(i = ;ht->h_aliases[i];i++){
printf("Aliase: %s\n",ht->h_aliases[i]);
}
if(ht->h_addr_list[] ==NULL)
printf("No Ip \n");
for(i = ; ht->h_addr_list[i]; i++){
struct in_addr ip_in = *((struct in_addr *)ht->h_addr_list[i]);
printf("IP:%s",(char *)inet_ntoa(ip_in));
printf("\n");
}
}
return ;
}

  函数gethostbyname()和函数gethostbyaddr()都是不可重入的。也就是说连续调用多次此函数,最后得到只是最后一次的返回结果,所以要保存多次返回的结  果,就要把每次的结果都单独保存。

  上一篇文章中提到如何判断当前主机的字节序,以下代码可以作为参考:

#include <stdio.h>
#include <stdlib.h> union B_L
{
char INT[];
char CH[];
};
int main(int argc, char *argv[])
{
union B_L bl;
bl.INT[] = 0x00;
bl.INT[] = 0x00;
bl.INT[] = 0xff;
bl.INT[] = 0xff;
printf("%x%x",bl.CH[],bl.CH[]);
system("PAUSE");
return ;
}

如果输出结果为:00表示主机的字节序为大端字节序,否则为小端字节序。可以自己试着分析一下为啥。。

下一篇:数据的IO和复用

Linux 网络编程基础(2)-- 获取主机信息的更多相关文章

  1. 服务器编程入门(4)Linux网络编程基础API

      问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字( ...

  2. Linux 高性能服务器编程——Linux网络编程基础API

    问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字(so ...

  3. 第5章 Linux网络编程基础

    第5章 Linux网络编程基础 5.1 socket地址与API 一.理解字节序 主机字节序一般为小端字节序.网络字节序一般为大端字节序.当格式化的数据在两台使用了不同字节序的主机之间直接传递时,接收 ...

  4. Linux网络编程基础API

    第5章 Linux网络编程基础API 探讨Linux网络编程基础API与内核中TCP/IP协议族之间的关系,并未后续章节提供编程基础.从3个方面讨论Linux网络API. socket地址API.so ...

  5. linux高性能服务器编程 (五) --Linux网络编程基础api

    第五章 Linux网络编程基础api 1.主机字节序和网络字节序 字节序是指整数在内存中保存的顺序.字节序分为大端字节序.小端字节序. 大端字节序:一个整数的高位字节数据存放在内存的低地址处.低位字节 ...

  6. Linux 网络编程基础(1)--网络相关的数据结构及转化函数

    在Linux下进行网络编程,使用的语言一般为C.就个人感受而言,在Linux下进行网络程序的编写,重要的不是代码能力要多强,而是对Linux的网络编程思想的理解和对Linux网络数据结构的掌握.如果想 ...

  7. linux网络编程基础--(转自网络)

    转自 http://www.cnblogs.com/MyLove-Summer/p/5215287.html Linux下的网络编程指的是socket套接字编程,入门比较简单. 1. socket套接 ...

  8. Linux网络编程基础

    1. Linux网络模型 ① OSI七层模型和Linux四层模型 ② 各种协议之间的关系及在Linux模型中的位置 ③ 协议封装:各种协议处于一种层层封装的关系 (1)Ethernet (2)IP * ...

  9. linux 网络编程 基础

    网络编程基础 套接字编程需要指定套接字地址作为参数,不同的协议族有不同的地址结构,比如以太网其结构为sockaddr_in. 通用套接字: struct sockaddr { sa_family_t ...

随机推荐

  1. 分布式传输协调程序MSDTC配置

    尊重原著作:本文转载自http://blog.csdn.net/wilsonke/article/details/8468438 配置说明文件:http://files.cnblogs.com/hlx ...

  2. SQL Server 备份维护计划

    1. 创建维护计划:SSMS -> 管理 -> 维护计划 -> 新建维护计划 2. 添加子计划(备份计划) a) 每30分钟:事务日志备份  每天:差异备份  每周:完整备份 b) ...

  3. CCF计算机认证注意事项

    1,同一变量只使用一次,你是使用同名的局部变量. 2,if()条件语句里面再不要使用单一的if()条件语句. 这应该都是他们系统的bug

  4. 独立版Jexus

    一:下载资源包 把 jexus压缩包下载到linux临时文件夹中. cd /tmp wget linuxdot.net/down/jexus--x64.tar.gz 二,解压: tar -zxvf j ...

  5. 将以管理员方式运行cmd运行方式放到win7任务栏

    首先在桌面空白地方(没有桌面图标位置),点击鼠标右键,选择新建--快捷方式,如下图:       弹出创建快捷方式窗口,输入cmd.exe的路径及文件名,下图是天缘的Windows 7安装到C盘对应的 ...

  6. <a>标签中 href="/" 和 hideFocus="true"

    一:href="/" 连接到根目录 这是相对路径的根目录表示方法 可以写为 http://class.qq.com/">腾讯精品课 (绝对路径写法) 也可以为 腾讯 ...

  7. sf

    #include <stdio.h> #include <time.h> #include <stdlib.h> #define MAXN 150 //最大节点数 ...

  8. C语言入门(14)——结构体

    整数.字符.布尔值.浮点数这些数据类型都具有单一的值,这些可称为基本数据类型.但字符串是一个例外,它由很多字符组成,像这种由基本类型组成的数据类型称为复合数据类型,正如表达式和语句有组合规则一样,由基 ...

  9. CSV 客座文章系列: Pruffi 通过 Windows Azure 挖掘社交媒体的强大招聘潜能

    编辑人员注释:今天这篇文章由 Pruffi 创始人 Alena Vladimirskaya 和 Pruffi 的 CTO Alexander Ivanov 联合撰写,介绍了该公司如何使用 Window ...

  10. POJ 2799 IP Networks

    network address是前(32-n)随意 后n位全零 network mask是前(32-n)全一 后n位全零 本题主要利用位移操作,1ULL表示无符号长整型的常数1,这样写可防止不必要的溢 ...