gethostname、gethostbyname
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的更多相关文章
- 关于 getsockname、getpeername和gethostname、gethostbyname
一.gethostname,gethostbyname的用法 这两个函数可以用来获取主机的信息.gethostname:获取主机的名字gethostbyname:通过名字获取其他的信息(比如ip) 1 ...
- gethostname(获取主机名)、gethostbyname(由主机名获取IP地址)
int gethostname(char *name, size_t len);获取本地主机名存入name[len],成功返回0,失败返回-1: struct hostent * gethostbyn ...
- 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; ...
- 一个进程发起多个连接和gethostbyname等函数
一.在前面讲过的最简单的回射客户/服务器程序中,一个客户端即一个进程,只会发起一个连接,只要稍微修改一下就可以让一个客户端发起多个连 接,然后只利用其中一个连接发送数据. 先来认识一个函数getsoc ...
- 【网络基础编程】第三节 C/S
学习地址: C语言中文网 - 实现迭代服务端和客户端 GNU - Closing a Socket 前面介绍的程序,不管Service 端还是 Client端,都有一个问题,就是处理完一个 accep ...
- 用C++实现网络编程---抓取网络数据包的实现方法
一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包.抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议.IP.UDP.TCP.甚至各 ...
- VC++ 获取本地IP和计算机名
主要是两个函数的使用,gethostname();.gethostbyname(); 自定义两个函数GetLocalHostName获取计算机名.GetIPAddress获取IP地址 int CIPD ...
- vc根据域名获取IP地址 gethostbyname()函数
以下是VC Socket初始化时用到的两个函数 一.WSAStartup函数 int WSAStartup ( ...
- Linux 获取本机IP、MAC地址用法大全
getifaddrs()和struct ifaddrs的使用,获取本机IP ifaddrs结构体定义如下: struct ifaddrs { struct ifaddrs *ifa_next; /* ...
随机推荐
- 转载 VUE+WebPack环境搭建 https://segmentfault.com/a/1190000010960666
一.vue有两种使用方式: 1.下载vue.js <script src="vue.js"></script> 2.使用npm npm install vu ...
- js获取简单表单对象(1)
<form id="form"> <input type="text" name="username" value ...
- drf之接口规范
web接口 # 请求工具:postman => https://www.getpostman.com/ # 接口:url链接,通过向链接发生不同的类型请求与数据得到相应的响应数据 # http: ...
- 【转载】C#中AddRange方法往ArrayList集合末尾添加另一个集合
ArrayList集合是C#中的一个非泛型的集合类,是弱数据类型的集合类,可以使用ArrayList集合变量来存储集合元素信息,任何数据类型的变量都可加入到同一个ArrayList集合中,如果需要往一 ...
- JavaScript 函数(二)
一.匿名函数 1.匿名函数 没有名字的函数即称为匿名函数. 2.使用方法 a.将匿名函数赋值给一个变量,这样就可以通过变量进行调用 b.匿名函数自调用 3.关于自执行函数(匿名函数自调用)的作用:防止 ...
- rabbitmq:配置rabbitmq-management插件
rabbitmq提供了一个图形的管理界面,用于管理.监控rabbitmq的运行情况,它是以插件的形式提供的,如果要启用需要启用插件 一.启用插件 rabbitmq-plugins enable rab ...
- springboot+内置改为外置tomcat
1.pom.xml springboot项目利用的是自己内置的tomcat,这边就是不依赖内置的tomcat,将其编译的作用域设置为provided <dependency> <gr ...
- Python学习日记(三十七) Mysql数据库篇 五
pymsql的使用 初识pymysql模块 先在数据库中创建一个用户信息表,里面包含用户的ID.用户名.密码 create table userinfo( uid int not null auto_ ...
- 让window10目录支持大小写
今天用vmware影响文件夹以供linux系统使用,结果宿主机是win10系统,所以用在linux里,大小写变得不敏感. 解决办法也很简单. 管理员模式运行cmd(默认目录是C:\Windows\Sy ...
- .Net core3.0 集成swagger5.0上传文件
.Net core 3.0已经更新了,相信有挺多博主大佬们都更新了如何在.Net core3.0使用swagger,这里就不详细说了. 我们知道,如果.net core 2.x使用swagger上传文 ...