Linux 网络编程基础(2)-- 获取主机信息
前一篇已经介绍了最基本的网络数据结构。这篇介绍一下获取主机信息的函数
举个例子,想要通过代码的方式从百度获取当前的时间,怎么做?我们不知道百度的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)-- 获取主机信息的更多相关文章
- 服务器编程入门(4)Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字( ...
- Linux 高性能服务器编程——Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字(so ...
- 第5章 Linux网络编程基础
第5章 Linux网络编程基础 5.1 socket地址与API 一.理解字节序 主机字节序一般为小端字节序.网络字节序一般为大端字节序.当格式化的数据在两台使用了不同字节序的主机之间直接传递时,接收 ...
- Linux网络编程基础API
第5章 Linux网络编程基础API 探讨Linux网络编程基础API与内核中TCP/IP协议族之间的关系,并未后续章节提供编程基础.从3个方面讨论Linux网络API. socket地址API.so ...
- linux高性能服务器编程 (五) --Linux网络编程基础api
第五章 Linux网络编程基础api 1.主机字节序和网络字节序 字节序是指整数在内存中保存的顺序.字节序分为大端字节序.小端字节序. 大端字节序:一个整数的高位字节数据存放在内存的低地址处.低位字节 ...
- Linux 网络编程基础(1)--网络相关的数据结构及转化函数
在Linux下进行网络编程,使用的语言一般为C.就个人感受而言,在Linux下进行网络程序的编写,重要的不是代码能力要多强,而是对Linux的网络编程思想的理解和对Linux网络数据结构的掌握.如果想 ...
- linux网络编程基础--(转自网络)
转自 http://www.cnblogs.com/MyLove-Summer/p/5215287.html Linux下的网络编程指的是socket套接字编程,入门比较简单. 1. socket套接 ...
- Linux网络编程基础
1. Linux网络模型 ① OSI七层模型和Linux四层模型 ② 各种协议之间的关系及在Linux模型中的位置 ③ 协议封装:各种协议处于一种层层封装的关系 (1)Ethernet (2)IP * ...
- linux 网络编程 基础
网络编程基础 套接字编程需要指定套接字地址作为参数,不同的协议族有不同的地址结构,比如以太网其结构为sockaddr_in. 通用套接字: struct sockaddr { sa_family_t ...
随机推荐
- 20151222--Ajax三级无刷新
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- js call方法介绍
call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...
- 游戏基础元素之精灵——Cocos2d-x学习历程(九)
1.创建精灵 在实际使用中,精灵是由一个纹理创建的.在不加任何设置的情况下,精灵就是一张显示在屏幕上的图片.通常精灵置于层下,因此我们首选在层的初始化方法中创建精灵,设置属性,并添加到层中. 有多种方 ...
- C++中指针和引用的选择
何时使用引用和指针 1. 尽可能使用引用传递参数 2. 尽可能的使用const来保护引用和指针 3. 在可以使用引用的时候不要使用指针 4. 不要试图给引用重新 ...
- OC语法9——Category类别
Category(分类): 当我们在开发过程中要给类添加新的方法时,一般不要去动原类. 再不改动原类的限制下,怎么拓展类的方法?以往我们的做法是新建子类使其继承该类,然后通过子类拓展类的行为. OC提 ...
- 如果不知道MySQL当前使用配置文件(my.cnf)的路径的解决方法
如果不知道当前使用的配置文件的路径,可以尝试下面的操作: # which mysqld /usr/local/mysql/bin/mysqld # /usr/local/mysql/bin/mysql ...
- 航频之声APP截图
上传github的APP截图......
- Windows下Apache 虚拟主机 VirtualHost 配置
以下方式适合原生 Apache, XAMPP 和 WAMP 套件 1.修改Apache配置文件(httpd.conf),如下: # Virtual hostsInclude conf/extra/ht ...
- html5的自定义data-*属性与jquery的data()方法的使用
人们总喜欢往HTML标签上添加自定义属性来存储和操作数据.但这样做的问题是,你不知道将来会不会有其它脚本把你的自定义属性给重置掉,此外,你这样做也会导致html语法上不符合Html规范,以及一些其它副 ...
- [原创]使用GCC创建 Windows NT 下的内核DLL
原文链接:使用GCC创建 Windows NT 下的内核DLL 在温习<<Windows 2000 Driving>>分层驱动程序一章的时候,看到了关于紧耦合驱动连接方式,这种 ...