当前位置: 首页 > news >正文

Unix Network Programming Episode 77

‘gethostbyaddr’ Function

The function gethostbyaddr takes a binary IPv4 address and tries to find the hostname corresponding to that address. This is the reverse of gethostbyname.

#include <netdb.h>
struct hostent *gethostbyaddr (const char *addr, socklen_t len, int family);

‘getservbyname’ and ‘getservbyport’ Functions

Services, like hosts, are often known by names, too. If we refer to a service by its name in our code, instead of by its port number, and if the mapping from the name to port number is contained in a file (normally /etc/services), then if the port number changes, all we need to modify is one line in the /etc/services file instead of having to recompile the applications. The next function, getservbyname, looks up a service given its name.

#include <netdb.h>
struct servent *getservbyname (const char *servname, const char *protoname);

This function returns a pointer to the following structure:

struct servent {char *s_name; /* official service name */char **s_aliases; /* alias list */int s-port; /* port number, network-byte order */char *s_proto; /* protocol to use */
};

The service name servname must be specified. If a protocol is also specified (protoname is a non-null pointer), then the entry must also have a matching protocol.

The next function, getservbyport, looks up a service given its port number and an optional protocol.

#include <netdb.h>
struct servent *getservbyport (int port, const char *protoname);
#include "unp.h"int main(int argc, char **argv)
{int sockfd, n;char recvline[MAXLINE+1];struct sockaddr_in servaddr;struct in_addr **ptr;struct in_addr *inetaddrp[2];struct in_addr inetaddr;struct hostent *hp;struct servent *sp;if(argc!=3){err_quit("usage: daytimetcpclientl <hostname> <service>");}if((hp=gethostbyname(argv[1]))==NULL){if(inet_aton(argv[1],&inetaddr)==0){err_quit("hostname error for %s: %s",argv[1], hstrerror(h_errno));}else{inetaddrp[0]=&inetaddr;inetaddrp[1]=NULL;pptr=inetaddrp;}}else{pptr=(struct in_addr **)hp->h_addr_list;}if((sp=getservyname(argv[2],"tcp"))==NULL){err_quit("getservbyname error for %s", argv[2]);}for(;*pptr!=NULL;pptr++){sockfd=Socket(AF_INET, SOCK_STREAM,0);bzero(&servaddr, sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_port=sp->s_port;memcpy(&servaddr.sin_addr, *pptr, sizeof9struct in_addr));printf("trying %s\n", Sock_ntop((SA *)&servaddr, sizeof(servaddr)));if(connect(sockfd, (SA *)&servaddr, iszoef9servaddr))==0)break;err_ret("connect error");close(sockfd);}if(*pptr==NULL){err_quit("unable to connect");}while((n=Read(sockfd, recvline,MAXLINE))>0){recvlien[n]=0;Fputs(recvline, stdout);}return 0;
}

Our daytime client that uses gethostbyname and getservbyname

相关文章:

Unix Network Programming Episode 77

‘gethostbyaddr’ Function The function gethostbyaddr takes a binary IPv4 address and tries to find the hostname corresponding to that address. This is the reverse of gethostbyname. #include <netdb.h> struct hostent *gethostbyaddr (const char *addr…...

解决Ubuntu无法安装pycairo和PyGObject

环境&#xff1a;虚拟机Ubuntu20.04&#xff0c;vscode无法安装pycairo和PyGObject 虚拟机Ubuntu20.04&#xff0c;vscode中运行Anaconda搭建的vens 的Python3.8.10 首先在vscode中点击ctrlshiftp&#xff0c;选择Python3.8.10的环境&#xff0c;自动激活Python 最近在搞无人…...

Android Handler 机制解析

1、前言 在 Android 开发中&#xff0c;Handler 的机制和运行原理这方面的知识可以说是每个人都需要熟悉的。这不仅是因为 Handler 是 Android 应用的基石之一&#xff0c;也因为 Handler 整体设计上也是十分优秀的。接下来我就梳理总结一下常见的 Handler 相关知识点。 2、基…...

酒店固定资产管理怎么分类

在酒店业中&#xff0c;固定资产的管理是至关重要的一环。它不仅影响到企业的运营效率和盈利能力&#xff0c;而且直接影响到客户体验和品牌形象。因此&#xff0c;对于酒店管理者来说&#xff0c;合理、有效地进行固定资产管理是一项必不可少的任务。本文将探讨酒店固定资产的…...

OpenCV(三十一):形态学操作

​​​​​​1.形态学操作 OpenCV 提供了丰富的函数来进行形态学操作&#xff0c;包括腐蚀、膨胀、开运算、闭运算等。下面介绍一些常用的 OpenCV 形态学操作函数&#xff1a; 腐蚀操作&#xff08;Erosion&#xff09;&#xff1a; erode(src, dst, kernel, anchor, iteration…...

Python之面向对象(二)

目录 属性和方法静态属性/方法、普通属性/方法、类方法保护和私有属性/方法魔术方法构造方法(\_\_new__/\_\_init\_\_)析构方法(\_\_del__)调用方法&#xff08;\_\_call__&#xff09;toString方法\_\_str__、\_\_repr\_\_\_\_getitem__、setitem、delitem\_\_add__、\_\_gt\_…...

ESP32用作经典蓝牙串口透传模块与手机进行串口通信

ESP32用作经典蓝牙串口透传模块与手机进行串口通信 简介ESP32开发板Arduino程序手机与ESP32开发板进行蓝牙串口透传通信总结 简介 ESP32-WROOM-32模组集成了双模蓝牙包括传统蓝牙&#xff08;BR/EDR&#xff09;、低功耗蓝牙&#xff08;BLE&#xff09;和 Wi-Fi&#xff0c;具…...

Python 操作 CSV

使用过 CSV 文件都知道&#xff1a;如果我们的电脑中装了 WPS 或 Microsoft Office 的话&#xff0c;.csv 文件默认是被 Excel 打开的&#xff0c;那么什么是 CSV 文件&#xff1f;CSV 文件与 Excel 文件有什么区别&#xff1f;如何通过 Python 来操作 CSV 文件呢&#xff1f;带…...

自动化运维工具Ansible教程(二)【进阶篇】

文章目录 前言Ansible 入门到精通自动化运维工具Ansible教程(一)【入门篇】自动化运维工具Ansible教程(二)【进阶篇】精通篇 进阶篇1. Ansible 的高级主题&#xff08;例如&#xff1a;角色、动态清单、变量管理等&#xff09;**1. 角色&#xff08;Roles&#xff09;**&#x…...

嵌入式Linux基础学习笔记目录

1. 嵌入式Linux应用开发基础知识 1.1 交叉编译 1.2 GCC编译器 1.3 makefire 1.4 文件I/O 1.5 Framebuffer应用编程 1.6 文字显示及图象显示 1.7 输入系统应用编程 1.8 网络编程 1.9 多线程编程 1.10 串口编程 1.11 I2C应用编程 2. 源码分析 2.1 MQTT源码 2.2 蓝牙源码 2.3 MJP…...

JVM | 垃圾回收器(GC)- Java内存管理的守护者

引言 在编程世界中&#xff0c;有效的内存管理是至关重要的。这不仅确保了应用程序的稳定运行&#xff0c;还可以大大提高性能和响应速度。作为世界上最受欢迎的编程语言之一&#xff0c;通过Java虚拟机内部的垃圾回收器组件来自动管理内存&#xff0c;是成为之一的其中一项必…...

yolov5添加ECA注意力机制

ECA注意力机制简介 论文题目&#xff1a;ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 论文地址&#xff1a;here 基本原理 &#x1f438; ECANet的核心思想是提出了一种不降维的局部跨通道交互策略&#xff0c;有效避免了降维对于通道注意…...

华为在高端智能手机市场再次撕开了一道深深的口子

智能手机市场趋于饱和&#xff0c;增长变得越来越难&#xff0c;智能手机厂商从被动卷走向了主动卷。 8月29日&#xff0c;华为宣布推出“HUAWEI Mate 60 Pro先锋计划”&#xff0c;并于当天中午在官方商城、部分线下门店上线销售新机Mate 60 Pro&#xff0c;它是全球首款支持卫…...

前端设计模式和设计原则之设计模式

作为前端开发&#xff0c;在code时&#xff0c;或多或少地都会践行设计模式&#xff0c;但是你清楚自己用到的是何种设计模式吗&#xff1f; 为什么前端开发一定要懂设计模式呢&#xff1f; code时不遵从设计模式&#xff0c;又能怎样呢&#xff1f; 上面的问题可以留作思考…...

提高在速卖通产品上的曝光率——自养号测评优势全面解析!

速卖通是国际贸易的一个平台&#xff0c;是国内外企业之间的一个桥梁。在速卖通中&#xff0c;如果要让产品得到更好地推广&#xff0c;就必须让产品得到更多的消费者认可。而产品的认可度除了品质保障和售后服务之外&#xff0c;评测也是非常重要的环节。 对于速卖通店铺销量…...

指针进阶(二)

指针进阶 5.函数指针6. 函数指针数组7. 指向函数指针数组的指针8. 回调函数案例&#xff1a;使用回调函数&#xff0c;模拟实现qsort&#xff08;采用冒泡的方式&#xff09;。案例&#xff1a;测试qsort排序结构体数据 5.函数指针 补&#xff1a; &函数名就是函数的地址 …...

【HCIE】03.BGP高级特性

每一条BGP路由都可以携带多个路径属性&#xff0c;针对其属性也有特有的路由匹配工具&#xff0c;包括&#xff1a;AS Path Filter和Community Filter。 import方向的属性&#xff0c;出现在如策略里面&#xff0c;加入到BGP路由表中&#xff0c;再传给路由表里&#xff0c;出去…...

单个处理数据祖籍列表层级关系

CREATE DEFINERroot% FUNCTION sys_organization_getAncestorsNames(deptId varchar(36)) RETURNS varchar(1000) CHARSET utf8DETERMINISTIC BEGINDECLARE parentDeptId varchar(36) default ; -- 父部门iddeclare parentDeptName varchar(100) default ; -- 父部门名称decla…...

Maven部署打包多环境(开发、测试、生产)配置教程

Maven打包多环境&#xff08;开发、测试、生产&#xff09;配置教程 1、多环境配置的必要性1.1 没有进行多环境配置进行的操作复杂性1.2 不影响运行时配置 2、配置方案2.1 添加profile属性2.1 添加两个插件2.3 主配置文件中添加插值变量 3、效果展示3.1 勾选prod环境3.2 控制台…...

【计算思维题】少儿编程 蓝桥杯青少组计算思维 数学逻辑思维真题详细解析第9套

蓝桥杯青少组计算思维 数学逻辑思维真题详细解析第9套 第十四届蓝桥杯省赛真题 1、要把下面4张图片重新排列成蜗牛的画像,该如何排列这些图片 A、 B、 C、 D、 答案:A 考点分析:主要考查小朋友们的观察能力空...

【Hello Algorithm】贪心算法

本篇博客介绍&#xff1a; 简单介绍下贪心算法 贪心算法 介绍贪心算法最小字典序的字符串拼接最多会议数切棍子的最小成本IPO灯塔问题 介绍贪心算法 贪心算法是一种极具有自然智慧的算法 它会使用以一种局部最功利的标准来做出一个当前看来最好的选择 如果说我们根据局部最优…...

TOP-K问题

目录 问题描述 解法及思想 第一种方式 算法思想 具体实现 第二种方式 算法思想 具体实现 问题描述 Top-K问题是一个十分经典的问题&#xff0c;一般有以下两种方式来描述问题&#xff1a; 在10亿的数字里&#xff0c;找出其中最大的100个数&#xff1b;在一个包含n个整…...

【保姆级从0到1】UE5 蓝图入门教程1:关卡、蓝图入门

20230113 1、新建项目 新建选择 UE 5.1 项目 选择蓝图&#xff0c;项目位置 改变编辑器布局&#xff0c;选择经典布局 2、关卡与蓝图 选择 File -> New Level 准备创建关卡 选择 Basic&#xff0c;点击 Create 进行创建 Ctrl S 保存新建的关卡 关卡蓝图的打开 鼠标右键&…...

【码银送书第六期】《ChatGPT原理与实战:大型语言模型的算法、技术和私有化》

写在前面 2022年11月30日&#xff0c;ChatGPT模型问世后&#xff0c;立刻在全球范围内掀起了轩然大波。无论AI从业者还是非从业者&#xff0c;都在热议ChatGPT极具冲击力的交互体验和惊人的生成内容。这使得广大群众重新认识到人工智能的潜力和价值。对于AI从业者来说&#xf…...

redis 报错 Redis protected-mode 配置文件没有真正启动

(error) DENIED Redis is running in protected mode because protected mode is enabled Redis protected-mode 是3.2 之后加入的新特性&#xff0c;在Redis.conf的注释中&#xff0c;我们可以了解到&#xff0c;他的具体作用和启用条件 链接redis 时只能通过本地localhost …...

解决a标签内容中img标签和p标签垂直方向间隔太大的问题

现象如下&#xff1a; 对应的html结构&#xff1a; 解决办法&#xff1a;给a标签设置&#xff1a;display: inline-block和line-height属性。 然后问题解决&#xff1a; 具体原理如下&#xff08;由chatgpt回答&#xff09;&#xff1a; display: inline-block 可以减少垂直方…...

如何选择靠谱的全景平台?VR全景加盟从哪方面对比?

VR全景行业经过近几年的发展&#xff0c;已经逐渐普及开来&#xff0c;线下各个行业都有实体商家开始引入VR全景去做营销宣传推广了。不少老板也意识到线上线下双渠道的重要性&#xff0c;而VR全景的存在就刚好满足各行各业的需求&#xff0c;从这一点不难看出&#xff0c;VR全…...

CentOS系统环境搭建(十八)——CentOS7安装Docker20.10.12和docker compose v2

centos系统环境搭建专栏&#x1f517;点击跳转 CentOS7安装Docker20.10.12和docker compose v2 关于Docker旧版本和docker compose1.0版本的安装可以看这一篇CentOS系统环境搭建&#xff08;三&#xff09;——Centos7安装Docker&Docker Compose。 1.卸载旧版本 卸载do…...

NebulaGrap入门介绍和集群安装部署

长风破浪八千里&#xff0c;落日晚霞不回头。 ——大宁。 NebulaGrap——分布式图数据库 官方文档&#xff1a; ​ NebulaGraph Database手册 ​ 官方文档 介绍 简介&#xff1a; ​ NebulaGraph 一款开源、分布式图数据库&#xff0c;擅长处理超大规模数据集。 Nebula …...

thinkphp5.0 composer 安装oss提示php版本异常

场景复现&#xff1a; 本地 phpstudy 环境&#xff0c;安装的有7.0到7.3三个版本&#xff0c;首先确认composer已经安装 composer安装阿里云oss的命令为&#xff1a;composer require aliyuncs/oss-sdk-php 运行报错&#xff1a; Problem 1- Root composer.json requires php…...

可以做公司网站/创建网站

题目链接 题目大意 一个人要睡n次&#xff0c;一天有h个小时&#xff0c;可以选择睡a[ i ]个小时或者a[ i ]-1个小时&#xff0c;起来之后又马上睡。 如果起来的时间在L和R中间&#xff08;闭区间&#xff09;&#xff0c;则答案加1&#xff0c;求最大的答案。 题目思路 显…...

东莞清洁服务网站建设/杭州seo网站优化

我已按照所有步骤操作&#xff0c;一切正常&#xff0c;直到我完成步骤&#xff1a;在命令行中输入以下命令;create database arc_logon;create database arc_characters;create database arc_world;这不是确切的地点&#xff0c;但在导游要求我之后不久&#xff1a;mysql -u r…...

新疆 网站开发/哪里能搜索引擎优化

安装问题 PHP Fatal error: Uncaught Error: Call to undefined function tsingsun\swoole\server\posix_kill() in /data/app/im/vendor/tsingsun/yii2-swoole/src/server/Server.php:248 查了下&#xff0c;php的扩展posix没开&#xff0c;php版本php7.1,环境CentOS7,使用如下…...

wordpress分类设置/泉州百度首页优化

2019独角兽企业重金招聘Python工程师标准>>> 第11章 通用视图 这里需要再次回到本书的主题&#xff1a; 在最坏的情况下&#xff0c; Web 开发是一项无聊而且单调的工作。 到目前为止&#xff0c;我们已经介绍了 Django 怎样在模型和模板的层面上减小开发的单调性&a…...

wordpress 模板 中文/网址导航推广

本篇文章是一篇关于工程图标的帖子 本例为iPhone iphone 程序logo像素为57X57 或114X114&#xff08;其他不可以&#xff09;而且格式为png 1、将准备好的图片添加到工程目录然后在工程中选择如下图 2、向下找到appicon 每日一道理 时间好比一条小溪&#xff0c;它能招引我们奔…...

网站做https/温州百度推广公司电话

现在的电脑大多数使用了UEFI引导系统&#xff08;原来都是使用BIOS&#xff09;&#xff0c;从而加快启动速度&#xff0c;但同时也给用惯BIOS的用户带来很多困惑&#xff01;为啥电脑不能识别制作好的u盘PE系统&#xff1f; 1华硕笔记本BIOS图解 两种引导对比&#xff1a; 1【…...