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;
char **h_addr_list;
#define h_addr h_addr_list[0]
};
h_name 地址的正式名称。
h_aliases 预备名称(别名)的指针。
h_addrtype 地址类型; 通常是AF_INET。
h_length 地址的比特长度。
h_addr_list 主机网络地址指针。网络字节顺序。
h_addr h_addr_list中的第一地址。
2. in_addr结构体
#include <arpa/inet.h>
typedef struct in_addr {
union {
struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { USHORT s_w1,s_w2; } S_un_w;
ULONG S_addr;
} S_un;
#define s_addr S_un.S_addr /* can be used for most tcp & ip code */
#define s_host S_un.S_un_b.s_b2 // host on imp
#define s_net S_un.S_un_b.s_b1 // network
#define s_imp S_un.S_un_w.s_w2 // imp
#define s_impno S_un.S_un_b.s_b4 // imp #
#define s_lh S_un.S_un_b.s_b3 // logical host
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;
3. gethostbyname()函数
#include <netdb.h>
#include <sys/socket.h> struct hostent *gethostbyname(const char *name);
此函数调用入参为主机名或者域名,例如www.google.com,wpc等等。函数返回一个指向struct hostent结构类型的指针,如果调用失败,就返回一个NULL。
返回的struct hostent结构体中的h_addr_list是一个指针数组,数组中的每个元素可以看作是指向in_addr型的指针。之所以定义为char**,是因为hostent结构支持
多种地址类型。
通过gethostbyname("www.baidu.com")得到hostent之后可以打印出如下内容:
host->h_addr_list[0][0] = 14
host->h_addr_list[0][1] = 215
host->h_addr_list[0][2] = 177
host->h_addr_list[0][3] = 37
4. inet_ntoa ()函数
#include <arpa/inet.h>
char *inet_ntoa (struct in_addr);
函数的功能是将网络字节序的地址转化为带“.”格式的IP地址字符串。
5. code
int main (int argc, char* argv[])
{
char iloop =;
char* strParaName = argv[];
struct hostent* s_host = NULL; if(argc != )
{
printf("INVALID PARA\n");
exit();
} if((s_host = gethostbyname(strParaName)) == NULL)
{
printf("gethostbyname error\n");
exit();
} for(iloop = ; iloop < ; iloop++)
{
printf("h_addr_list[0][%d] = %d\n", iloop, (unsigned char)s_host->h_addr_list[][iloop]);
} for(iloop = ; s_host->h_addr_list[iloop] != NULL; iloop++)
{
printf("h_addr_list[0] = %s\n", inet_ntoa(*((struct in_addr*)s_host->h_addr_list[])));
} return ;
}
代码在linux上编译运行结果如下:

socket编程基础1——hostent、in_addr、gethostbyname、inet_ntoa的更多相关文章
- socket编程基础-字节序/IP/PORT转换/域名
socket编程基础 网络IP操作函数 字符串的IP和32位的IP转换 #include <sys/socket.h> #inlcude <netinet/in.h> #inc ...
- c#socket编程基础
Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类 ...
- <转>Socket编程——基础介绍
最近系统的看了下unix网络编程的一些内容,对socket的理解有了进一步的加深,在看APUE的时候,那会儿看socket上面介绍的比较少,只是模糊的懂了如何去写一个简单的TCP服务端和客户端,对其中 ...
- Java从零开始学四十五(Socket编程基础)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- java socket编程基础(转)
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- Python学习笔记——基础篇【第七周】———FTP作业(面向对象编程进阶 & Socket编程基础)
FTP作业 本节内容: 面向对象高级语法部分 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 参考:http://www.cnblogs.com/wupeiqi/ ...
- 【转】Java Socket编程基础及深入讲解
原文:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html#q2.3.3 Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要 ...
- 【Socket】Java Socket编程基础及深入讲解
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- 你得学会并且学得会的Socket编程基础知识
这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解. 本文源代码,可以通过这里下载 http://files.cnblog ...
随机推荐
- Linux学习笔记之Linux第一课-基本介绍
Linux简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基 ...
- 实现动态代理(Java和spring)
一.Java实现动态代理 1.创建接口 package com.oyy.mw.biz.i; public interface Cal { public int add(int num1,int num ...
- 猿创|有赞的zan framework安装与使用[2]
下载并安装comoser curl -sS https://getcomposer.org/installer | php 结果各种超时 不能忍,打开迅雷下载installer:https://get ...
- HTML专题
1. 在<form><form/>标签里面的<button>标签要设置type="button",否则可能会在点击按钮时自动提交这个表单 2. ...
- CSS3中REM使用详解
px 在Web页面制作中,我们一般使用“px”来设置我们的文本,因为他比较稳定和精确.但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,他改变了浏览器的字体大小(虽然一般人不会去改 ...
- CRM中间件里的发布-订阅者模式
从事务码SMW01里能观察到一个BDOC可能被发送往不止一个目的site去,比如下图所示的5个site都会收到该site,而高亮显示的SMOF_ERPSITE代表ERP系统QI3的client 504 ...
- 效率对比:各种语言构造100W个时间对象
原本是用perl写了一个通过给定的时间范围来筛选一个比较大的日志文件.但是测试发现筛选130W行日志需要2分多钟,对其中几个低效率函数单独进行了效率测试,发现构造100W个时间对象所花时间也是个大户. ...
- 2018.10.17 学习如何使用Shiro
参考学习https://www.javazhiyin.com/19502.html
- 【题解】洛谷P2532 [AHOI2012]树屋阶梯(卡特兰数+高精)
洛谷P2532:https://www.luogu.org/problemnew/show/P2532 思路 来自Sooke大佬的推导: https://www.luogu.org/blog/Sook ...
- HDU 1099 Lottery (求数学期望)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1099 Lottery Time Limit: 2000/1000 MS (Java/Others) ...