背景

后台项目划分几个小服务,分别部署到不同的docker容器中,不同服务通过socket连接,docker的IP地址是由dockerd自动分配的,当然,也可以固定IP,但这样不好。因此,为了方便部署和维护,考虑通过容器别名的方式。容器名通过ini配置文件传递到程序里,程序需要根据容器名解析出对应的IP地址。于是找了些实现域名解析的方法。
网上有用boost库实现的,但这个库太庞大了,不适用,后来发现linux下有gethostbyname函数可以实现。于是参考网上资料写了一个接口。

实现接口

// 注:如需获取网站IP地址,参数填写域名即可,不需加"http://"
int socket_resolver(const char *domain, char* ipaddr)
{if (!domain || !ipaddr) return -1;struct hostent* host=gethostbyname(domain);if (!host){return -1;}// 获取第一个IP地址strncpy(ipaddr, inet_ntoa(*(in_addr*)host->h_addr), 16);#if 0// 获取所有的地址for (int i = 0; host->h_addr_list[i]; i++){//printf("%d ip: %s\n", i, inet_ntoa(*(in_addr*)host->h_addr_list[i]));}#endifreturn 0;
}

测试函数

测试程序如下:

#include <string>
#include <iostream>
void main()
{//char* hostname = "www.latelee.com";//"www.baidu.com";//"latelee-wordpress";char* hostname = "172.18.18.168";char ip[16] = {0};socket_resolver("www.latelee.com", ip);printf("dddd: %s\n", ip);socket_resolver("www.baidu.com", ip);printf("dddd: %s\n", ip);socket_resolver("latelee-wordpress", ip);printf("dddd: %s\n", ip);socket_resolver("172.18.18.18", ip);printf("dddd: %s\n", ip);std::string domain;std::string ipstr;ipstr.resize(16);domain = "www.baidu.com";socket_resolver(domain.data(), (char*)ipstr.c_str());printf("dddd: %s\n", ipstr.c_str());
}

小结

对于容器之间的网络连接,建议使用容器别名的方式,因为容器别名可以在docker rundocker-compose.yml中指定,从而不会因为容器IP变化而修改代码或配置文件。

李迟 2018.8.17 中午休息前

linux系统C语言实现域名解析功能相关推荐

  1. linux 系统 Shell语言 基础

    linux 系统 Shell语言 基础 第一章 Shell 编程 1 . 概述 ​ Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Sh ...

  2. linux的增强文件夹,在linux系统中安装virtualbox增强功能(增强包)的详细步骤是什么...

    在linux系统中安装virtualbox增强功能(增强包)的详细步骤是什么 1. 点击菜单栏 设备 –> 分配光驱 –> 选择一个虚拟光盘,找到VirtualBox安装目录下的`VBox ...

  3. Linux系统C语言遍历系统文件系统,并查询其磁盘使用率(有效磁盘)

    getmntent_r接口示例程序地址:https://github.com/Rtoax/test/tree/master/c/glibc/mntent statfs 接口示例程序地址​​​​​​​: ...

  4. AVI音视频封装格式学习(四)——linux系统C语言AVI格式音视频封装应用

    拖了很久的AVI音视频封装实例,花了一天时间终于调完了,兼容性不是太好,但作为参考学习使用应该没有问题.RIFF和AVI以及WAV格式,可以参考前面的一些文章.这里详细介绍将一个H264视频流和一个2 ...

  5. linux c 串口 调用命令,Linux系统C语言串口收发

    Linux系统C语言串口收发 Linux系统对串口提供了很好的支持,使我们很容易就能用C语言编写出串口收发程序. 先简单说明一下编写串口收发程序前的准备工作.首先串口收发需要有硬件上的串口,在Linu ...

  6. linux系统c语言并发测试http协议post请求

    linux系统c语言并发测试http协议post请求 特殊场景,工作中遇到的. 有一个http服务端需要并发测试接口处理能力. 之前开发过程中测试都是用的postman 面对高并发模拟,postman ...

  7. linux系统C语言学习总结

    引言 尽管 C 语言问世已近 30 年,但它的魅力仍未减退.C 语言继续吸引着众多的开发者,他们为了编写.移植或维护应用程序而必须学习新技能. 本文是为了满足对C语言初学者或想提高自身C语言修为的开发 ...

  8. linux查看双机状态命令,Linux 系统下双机HA的功能实现

    在Linux系统上双机功能的实现,对双机软件High-Availability Linux Project的安装.配置.运行以及测试进行说明.1.软件及安装说明本文档描述的Linux-HA软件以及参考 ...

  9. 原来,在Linux系统也有快速格式化功能

    一.问题背景 在使用mkfs格式化1TB左右容量的硬盘时发现所耗费的时间很长,简直是一种折磨.那么,对于Linux的硬盘格式化是否也有像windows系统下快速格式化功能呢?经过查阅相关资料,发现Li ...

最新文章

  1. html的css样式中表示后代选择器,html添加css——样式选择器
  2. C++/C中定义与声明的区别
  3. 分别用函数和带参的宏,从三个数中找出最大的数。
  4. 网页特效offset、client、scroll系列属性的作用
  5. Usb设备驱动5:usb-firmware简易框架
  6. Struts2_HelloWorld_3
  7. hdu 4155 回溯
  8. 易语言升级版火山软件开发平台现在很庞大了
  9. 三菱PLC编程软件操作快捷键汇总
  10. IplImage中的widthStep大小计算及原理
  11. xp获取计算机管理员权限,xp管理员权限怎么获取?管理员权限不足的解决方法...
  12. python程序设计基础之注释
  13. 【xla】七、【构图阶段】其他pass
  14. 微信小程序: input输入框placeholder样式的修改
  15. WinInet库之Http通信
  16. 由“人人网”解析移动互联网的未来发展战略
  17. 从SEO优化角度打造移动端网站的移动建站指南
  18. linux做界面切换,linux两个界面之间的切换
  19. 2020年重庆区块链论坛,大石化新区与时俱进
  20. 初学者也能轻松做出好Beat——FL Studio FPC鼓机使用教程

热门文章

  1. 我最喜欢的二十句名言
  2. 最早将于Q3季度发布,小米12至尊版将搭载骁龙8 Plus
  3. 押中三位奥运冠军 元气森林“赢麻了”
  4. 何小鹏退出UC浏览器母公司股东名单
  5. iPhone 13与12对比图曝光:更厚、更大了
  6. 《财富》评2020年最受赞赏中国公司:华为第一 小米第三
  7. 瑞幸之后,又一支中概股自曝:虚增收入,股价盘后大跌
  8. 华为P40 Pro Plus:徕卡五摄加持 称霸DxOMark几无悬念
  9. 董明珠回应口罩预约不到:没想到几十万人预约 正提高产能
  10. 5亿人都在用的拼多多还在亏损,百亿补贴仍将继续