gethostname():返回本地主机的标准主机名

原型:

#include<unistd.h>

int gethostname(char *name, size_t len);

参数说明:

name:  接收缓冲区,字节长度必须为len,或更长,存获取主机名

len:      接收缓冲区name的最大长度

返回值:

如果函数成功,返回0,如果发生错误,返回-1,错误号存放在外部变量errno中。

/*
gethostname.c
*/
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h> #define ERR_EXIT(m) \
do {\
perror(m); \
exit(EXIT_FAILURE); \
}while(); int main()
{
char name[];
if (gethostname(name, sizeof(name)))
{
ERR_EXIT("gethostname");
} printf("hostname = %s\n",name); return ;
}

运行结果:

gethostbyname()

函数原型:

#include <netdb.h>
#include <sys/socket.h>
struct hostent *gethostbyname(const char *name);

参数说明:

name:域名或主机名

返回值:

调用成功,返回一个hostent结构,若函数调用失败,返回NULL

返回的hostent结构体类型的指针:

struct hostent {

    char *h_name;   /* official name of host */
char **h_aliases; /*alias list */
int h_addrtype; /* host address type */
int h_length; /* length of address */
char **h_addr_list; /* list of addresses*/ } #define h_addr h_addr_list[0] /* for backward compatibility */

hostent->h_name

表示的是主机的规范名。例如www.google.com的规范名其实是www.l.google.com.

 hostent->h_aliases

表示的是主机的别名www.google.com就是google他自己的别名。有的时候,有的主机可能有好几个别名,这些,其实都是为了易于用户记忆而为自己的网站多取的名字。

  hostent->h_addrtype

表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是ipv6(AF_INET6)

  hostent->h_length

表示的是主机ip地址的长度

  hostent->h_addr_list

表示的是主机的ip地址,注意,这个是网络字节存储的。千万不要直接用printf带%s参数来打这个东西,会有问题的哇。所以到真正需要打印出这个IP的话,需要调用inet_ntop()。

  const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);

这个函数,是将类型为af的网络地址结构src,转换为主机序的字符串形式,存放在长度为cnt的字符串中。返回指向dst的一个指针。如果函数调用错误,返回值是NULL。

/*
gethostbyname.c
*/
#include<stdio.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<sys/socket.h> int main()
{
char name[];
gethostname(name,sizeof(name));
printf("hostname = %s\n",name); struct hostent *hp;
if ((hp = gethostbyname(name)) == NULL)
{
printf("gethostbyname error");
} int i = ;
while(hp->h_addr_list[i] != NULL)
{
printf("hostname : %s\n",hp->h_name);
printf("\tip:%s\n",inet_ntoa(*(struct in_addr*)hp->h_addr_list[i]));
i++;
}
return ;
}

运行结果:

gethostname、gethostbyname的更多相关文章

  1. 关于 getsockname、getpeername和gethostname、gethostbyname

    一.gethostname,gethostbyname的用法 这两个函数可以用来获取主机的信息.gethostname:获取主机的名字gethostbyname:通过名字获取其他的信息(比如ip) 1 ...

  2. gethostname(获取主机名)、gethostbyname(由主机名获取IP地址)

    int gethostname(char *name, size_t len);获取本地主机名存入name[len],成功返回0,失败返回-1: struct hostent * gethostbyn ...

  3. socket编程基础1——hostent、in_addr、gethostbyname、inet_ntoa

    1. struct hostent结构体 struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; ...

  4. 一个进程发起多个连接和gethostbyname等函数

    一.在前面讲过的最简单的回射客户/服务器程序中,一个客户端即一个进程,只会发起一个连接,只要稍微修改一下就可以让一个客户端发起多个连 接,然后只利用其中一个连接发送数据. 先来认识一个函数getsoc ...

  5. 【网络基础编程】第三节 C/S

    学习地址: C语言中文网 - 实现迭代服务端和客户端 GNU - Closing a Socket 前面介绍的程序,不管Service 端还是 Client端,都有一个问题,就是处理完一个 accep ...

  6. 用C++实现网络编程---抓取网络数据包的实现方法

    一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包.抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议.IP.UDP.TCP.甚至各 ...

  7. VC++ 获取本地IP和计算机名

    主要是两个函数的使用,gethostname();.gethostbyname(); 自定义两个函数GetLocalHostName获取计算机名.GetIPAddress获取IP地址 int CIPD ...

  8. vc根据域名获取IP地址 gethostbyname()函数

    以下是VC Socket初始化时用到的两个函数 一.WSAStartup函数                int WSAStartup                       (         ...

  9. Linux 获取本机IP、MAC地址用法大全

    getifaddrs()和struct ifaddrs的使用,获取本机IP ifaddrs结构体定义如下: struct ifaddrs { struct ifaddrs *ifa_next; /* ...

随机推荐

  1. jQuery中使用Ajax获取JSON格式数据示例代码

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.JSONM文件中包含了关于“名称”和“值”的信息.有时候我们需要读取JSON格式的数据文件,在jQuery中 ...

  2. sql server 根据字段去重

    使用 row_number() over (partition by 要去重的字段 order by 排序字段) 数据库表结构 学生成绩表 UserGrade Id        int       ...

  3. JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态

    JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态  2017年10月25日  Jet Ma  JavaPlatform JVM故障分析系列系列文章 JVM故障分析系列之一: ...

  4. python自动化使用 HtmlTestRunner 测试用例描述出现dict() -> new empty dictionary

    python自动化使用 HtmlTestRunner  测试用例描述出现dict() -> new empty dictionary这个问题,找了各种资料,发现是ddt.py 的问题 修改了dd ...

  5. JDBC 复习

    概念 Java DataBase Connectivity java数据库连接 定义了操作所有关系型数据库的规则(接口),不同的数据库厂商编写类实现这些接口,这些类就叫数据库驱动,使得用户只需要使用统 ...

  6. 原生JS实现前端动画框架

    封装了一个JS方法,可支持块元素的常规动画:高.宽.透明度.位置等,同时支持链式动画和同时运动,参照imooc整理,具体代码如下: /** * 获取HTML元素属性值 * obj是Element, a ...

  7. android启动时间慢的问题

     [转]对于Android的性能这方面评估,大部分都是有超级兔子去比跑分的,还是不能反映全面的问题.就我知道的而言,应用启动时间是很影响用户体验的一个性能方面问题. 最近的一个项目,别人都说应用启动慢 ...

  8. java读取Properties文件的方法

    resource.properties的内容: com.tsinkai.ettp.name=imooc com.tsinkai.ettp.website=www.imooc.com com.tsink ...

  9. 常用内置模块(一)--time、os、sys、random、shutil、pickle、json

    一.time模块 Python中,通常有这几种方式来表示时间: 1.时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type( ...

  10. Cleaning Robot POJ - 2688

    题目链接:https://vjudge.net/problem/POJ-2688 题意:在一个地面上,有一个扫地机器人,有一些障碍物,有一些脏的地砖,问,机器热能不能清扫所有的地砖, (机器人不能越过 ...