网络编程学习(八)

getservbyname getservbyname函数有讲解和实例,在windows下展示。 由于市面上很少有所以写出来与大家商量 立即下载

gethostbyname和gethostbyaddr在主机名字与IPv4地址之间进行转换,

getservbyname和getservbyport在服务名字和端口号之间进行转换,

getaddrinfo和getnameinfo分别用于主机名字和IP地址之间以及服务名字和端口号之间的转换。


域名系统DNS主要用于主机名字与IP地址之间的映射。

主机名字既可以是一个简单名字,也可以是一个全限定域名。


解析器代码通过读取其系统相关配置文件确定本组织机构的名字服务器们的所在位置。文件/etc/resolv.conf通常包含本地名字服务器主机的IP地址。

解析器使用UDP向本地名字服务器发出查询。如果本地名字服务器不知道答案,它通常就会使用UDP在整个因特网上查询其他名字服务器。如果答案太长,超出了UDP消息的承载能力,本地名字服务器和解析器会自动切换到TCP。


gethostbyname与我们介绍过的其他套接字函数的不同之处在于:当发生错误时,它不设置errno变量,而是将全局整数变量h_errno设置为头文件<netdb.h>中定义的下列常指之一:HOST_NOT_FOUND,TRY_AGAIN,NO_RECOVERY,NO_DATA(NO_ADDRESS)。NO_DATA错误表示指定的名字有效,但是它没有A记录。只有MX记录的主机名就是这样的一个例子。

如今多数解析器提供名为hsterror的函数,它以某个h_errno值作为惟一的参数,返回的是一个const char *指针,只想相应错误的说明。


像主机一样,服务也通常靠名字来认知。如果我们在程序代码中通过其名字而不是其端口号来指定一个服务,而且从名字到端口号的映射关系保存在一个文件中(通常是/etc/services),那么即使端口号发生变动,我们需修改的仅仅是/etc/services文件中的某一行,而不必重新编译应用程序。


服务器名参数servname必须指定。如果同时制定了协议(即protoname参数为非空指针),那么指定服务必须有匹配的协议。有些因特网服务既用TCP也用UDP提供,其他因特网服务则仅仅支持单个协议(例如FTP要求使用TCP)。如果protoname未指定而servname指定服务支持多个协议,那么返回哪个端口号取决于实现。通常情况下这种选择无关紧要,因为支持多个协议的服务往往使用相同的TCP端口号和UDP端口号,不过这点没有保证。


servent结构中我们关心的主要字段是端口号。既然端口号是以网络字节序返回的,把它存放到套接字地址结构时绝对不能调用htons。


getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个sockaddr结构而不是一个地址列表。这些sockaddr结构随后可由套接字函数直接使用。

如此一来,getaddrinfo函数把协议相关性完全隐藏在这个库函数内部。应用程序只需处理由getaddrinfo填写的套接字地址结构。


假设我们调用getaddrinfo,遍历返回的addrinfo结构链表后找到所需的结构。如果我们为保存其信息仅仅复制这个addrinfo结构,然后调用freeaddrinfo,那就引入了一个潜藏的错误。原因在于这个addrinfo结构本身指向动态分配的内存空间(用于存放套接字地址结构和可能有的规范主机名),因此由我们保存的结构指向的内存空间已在调用freeaddrinfo时返还给系统,稍后可能用于其他目的。


只复制这个addrinfo结构而不复制由它转而指向的其他结构称为浅复制(shallow copy)。既复制这个addrinfo结构又复制由它指向的所有其他结构称为深复制(deep copy)。


getnameinfo是getaddrinfo的互补函数,它以一个套接字地址为参数,返回描述其中的主机的一个字符串和描述其中的服务的另一个字符串。


函数重入问题:

某些函数共享同一个静态变量,传统的版本不可以重入;后续支持线程的一些实现则提供了可重入的版本

我们不应改从信号处理函数中调用标准I/O函数,因为许多版本的标准I/O函数库是不可重入的


有两种方法可以把诸如gethostbyname之类不可重入的函数改为可重入函数:

1.把由不可重入函数填写并返回静态结构的做法改为由调用者分配再由可重入函数填写结构(增加调用者的负担)

2.由可重入函数调用malloc以动态分配内存空间(必须调用对应的free函数来释放分配的内存)


【ESP32】1.编译、烧录、创建工程 本文介绍了在VSCode中搭建ESP32开发环境并烧录"Hello World"工程的过程。首先通过串口工具成功下载固件后,解决了OpenOCD报错问题。针对头文件无法识别的问题,修改了c_cpp_properties.json配置文件,调整了编译器路径和IntelliSense模式。文章还详细说明了创建新工程的步骤,包括选择芯片型号和项目模板,并验证了串口打印功能。最后提醒在项目构建时要等待完成,避免文件缺失。整个流程涵盖了环境搭建、代码烧录、调试及新项目创建等关键环节。 阅读详情

相关推荐

Oracle迁移至华为GaussDB SQL语法和存储过程转换

在将Oracle数据库迁移至GaussDB时,SQL语法和存储过程的转换是确保应用程序正常运行和数据完整性的关键环节。由于两者在数据类型、函数、过程语言等方面存在差异,必须系统化地进行转换和测试。正则表达式脚本:批量替换常见的语法差异。SQL解析工具:解析SQL脚本,生成GaussDB兼容的语法。代码审查工具:自动检查转换后的代码,确保语法和逻辑正确。将Oracle迁移至GaussDB涉及到SQL语法和存储过程的全面转换。通过系统化的转换步骤、使用合适的工具并结合手动调整,可以确保迁移过程的顺利进行。

weixin_38428874的博客 2397

域名解析——gethostbyname()函数及socket客户端域名解析

###gethostbyname()函数说明 gethostbyname()——用域名或主机名获取IP地址 头文件: #include <netdb.h> #include <sys/socket.h> 函数原型: struct hostent *gethostbyname(const char *name); 这个函数的传入值是域名或者主机名。返回值是一个hostent的结构体。如果函数调用失败,返回NULL。结构如下: struct hostent { cha

ZHENYU的博客 5165

国产大模型编程能力深度分析报告(2026年5月更新版)

2026年5月国产大模型编程能力报告显示,主流模型迎来重大升级。DeepSeek V4以1.6T参数创性能新高,Qwen3.6-Plus支持原生多模态编程,MiniMax M2.7转向闭源并优化Agent编码,Kimi K2.6成为商业化成熟的主力模型,GLM-5开源并涨价30%。阿里云百炼推出双轨订阅体系,区分团队和个人开发者需求。各模型在参数规模、上下文长度、性能表现和适用场景上各具优势,国产AI编程服务正加速向订阅制转型,成本效益显著提升。

Willin Wang 的全栈升级指南 1645

gethostbyname()函数详解

基本概念: gethostname()函数主要作用:用域名或者主机名获取地址,操作系统提供的库函数 函数原型: GETHOSTBYNAME(3) Linux Programmer's Manual GETHOSTBYNAME(3) NAME gethostbyname, gethostbyaddr, sethostent,

daiyudong2020的博客 6万+

零基础教程:用Python给试卷照片自动切题(有道OCR+PIL完整流程)

本文为零基础用户提供了一套完整的Python自动化切题方案。通过调用有道OCR API识别试卷照片中的题目坐标,并利用PIL库进行精准裁剪,将杂乱的试卷图片自动分割为独立的题目图像。教程详细涵盖了环境搭建、图像预处理、API调用、坐标解析与批量处理全流程,帮助教育工作者和技术爱好者高效处理大量试卷,实现工作流程自动化。

grpc6streamer的博客 1173

如何用python开发“跳一跳”游戏【附源码】

jump_start_time = pygame.time.get_ticks() # 记录跳跃开始时间。jump_duration = current_time - jump_start_time # 计算跳跃持续时间。current_time = pygame.time.get_ticks() # 获取当前时间。jump_velocity = -15 # 设置跳跃的初始速度。# 如果小球跳跃结束,重置跳跃状态。# 根据跳跃持续时间计算跳跃高度。# 移除超出屏幕的障碍物。

helloshili2011的博客 2495

【Linux C | 网络编程】gethostbyname 函数详解及C语言例子

👉本文主要介绍将域名转换为IP地址的函数gethostbyname,以及提供使用例子。

wkd_007的博客 7565

FPGA开发中Quartus与Modelsim联合仿真配置与调试全攻略

在数字电路设计与FPGA开发中,仿真验证是确保逻辑功能正确性和时序性能达标的核心环节。其基本原理是通过软件模拟硬件电路的行为,在设计转化为实际硬件前发现潜在缺陷。这项技术的核心价值在于大幅降低开发风险与成本,提升设计可靠性,广泛应用于通信、嵌入式系统、芯片验证等领域。对于使用Intel FPGA平台的开发者,Quartus Prime作为官方综合布局布线工具,其内置仿真器在应对复杂设计、深度调试和自动化测试时存在局限。此时,引入专业仿真工具Modelsim进行联合仿真成为提升验证效率的关键实践。通过搭建自动

weixin_33736048的博客 451

gethostbyname的用法以及阻塞问题

gethostbyname函数通常用于根据域名获取ip地址,函数原型如下所示 #include <netdb.h> struct hostent *gethostbyname(const char *name); 函数返回hostent结构指针,如果失败则返回NULL指针。 hostent结构定义如下所示 struct hostent { char *h_name; // 主机规范名 char **h_aliases; // 主机别名,可能有多个别名,以空指针结束

togolife的博客 4972

第11节:GPU 线程层级:线程、线程块、网格

层级标识变量功能线程threadIdx执行单元,处理数据线程块blockIdx管理多个线程,提供共享内存网格管理多个 blockGPU 编程中,合理安排线程层级,是提升性能的关键。

yumeiguo的博客 210

基于Gossip算法的柔性互联自治微网群分布式协调控制策略:复现代码与详细解释

摘要(149字): 本文基于Gossip算法实现了柔性互联微网群(MMG)的分布式协调控制策略仿真。研究构建了包含3个微网、10个分布式电源(DG)的MATLAB/Simulink模型,采用双层控制架构:上层通过柔性交流开关(FAS)实现微网间功率协调,下层利用Gossip算法完成DG间的边际成本一致性控制。重点开发了异步通信的Gossip算法核心函数,实现了分布式电源的自主边际成本估计与功率分配。仿真验证了系统在负荷变化和DG故障等工况下的协调控制能力,结果表明该策略能有效维持微网群的经济运行与功率平衡。

huanghm88的专栏 281

linux / gethostbyname() 函数详解

1、作用用域名或者主机名获取地址,操作系统提供的库函数。域名系统(Domain Name System,DNS)主要用于主机名字与 IP 地址之间的映射。每个组织机构往往运行一个或多个名字服务器(name server),我们编写的客户端和服务器等应用程序通过调用解析器(resolver)的函数库中的函数接触 DNS 服务器。常见的解析器函数是 gethostbyname 和 gethostbyaddr,下图展示了应用进程、解析器和名字服务器之间的一个典型关系。 二、返回值 失败返回 NULL 指针,

布袋和尚 3044

PINN:当深度学习遇上朗伯-比尔定律

光谱数据处理中引入PINN的三种架构设计

qq_53529450的博客 154

java学习(八)之网络编程

文章目录写在前面今日内容网络编程网络编程案例 写在前面 这两天在赶作业,就没得时间学习java了,今天把网络编程大致学习了,里面涉及到的流的知识,我发现我基本忘光了,感觉受到一万点打击,好叭,废话不多说,先来记录一下今天的学习内容。 今日内容 网络编程 网络编程时在一定的协议下,实现两台计算机的通信。 软件结构: C/S即Client/Server结构(客户端/服务器) B/S即Browser/Server结构(浏览器/服务器) 网络编程三要素 协议 IP地址 端口号 通信协议(TCP/IP

blueone456的博客 281

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SWUST--Java实验(八) 网络编程

import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JLabel; import java.awt.Fon...

CasT1R's Blog 1037

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java 学习笔记-网络编程(八)

网络编程 标签:学习各种网络协议的桥梁 什么是计算机网络 计算机网络的作用:资源共享和信息传递。 计算机网络的组成: a) 计算机硬件:计算机(大中小型服务器,台式机、笔记本等)、外部设备(路由器、交换机等)、通信线路(双绞线、光纤等)。 b) 计算机软件:网络操作系统(Windows 2000 Server/Advance Server、Unix、Linux等)、网络管理软件(WorkWin...

weixin_33720956的博客 151

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java学习八-网络编程

文章目录网络模型TCP消息发送文件发送 网络模型 TCP 消息发送 客户端和服务器之间的通信。 客户端TCPClient1.java package CommunicationTest; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public clas

天天向上 140

【JavaSE学习笔记】(八)网络编程

基本通信架构:CS(客户端/服务端)、BS(浏览器/服务端)网络编程实现通信。

m0_73580478的博客 258

linux网络编程学习之路(八)

文章目录服务器epoll模型代码 服务器epoll模型代码 C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。 vim中,:e重新加载 ...

weixin_43850162的博客 210

Java学习笔记(八)网络编程

Object、包装类、数学处理类的常用方法 文章目录一、概念七层网络模型TCP协议和UDP协议IP地址端口号二、基于tcp协议的编程模型1、编程模型2、常用类和方法3、代码示范 一、概念 七层网络模型 TCP协议和UDP协议 三次握手 四次挥手 IP地址 IP地址是互联网中的唯一地址标识,本质上是由32位二进制组成的整数,叫做IPv4,当然也有128 位二进制组成的整数,叫做IPv6,目前主流的还是IPv4。 查看IP地址的方式: Windows系统:在dos窗口中使用ipconfig或ipconfi

qq_41939242的博客 137

java基础学习笔记(八)--网络编程

一、网络编程的基本概念 1.1网络的概念 网络:一组相互连接的计算机,多台计算机组成,使用物理线路进行连接 1.2网络连接的功能 交换数据 共享资源 1.3网络编程的三要素 1) IP 地址:唯一标识网络上的每一台计算机,两台计算机之间通信的必备要素 2) 端口号:计算机中应用的标号(代表一个应用程序),0-1024 系统使用或保留端口,端号口占2 个字节,所以有效端口 0-65535 3) 通信协议:通信的规则 TCP,UDP 二、IP_端口_Sock...

m0_47419463的博客 302

JavaSE学习笔记(八):网络编程

目录 一、InetAddress类的使用 二、TCP网络编程 三、UDP网络编程 四、URL编程 最后 一、InetAddress类的使用 二、TCP网络编程 三、UDP网络编程 四、URL编程 最后 附上我的学习视频:尚硅谷Java入门视频教程(在线答疑+Java面试真题) 本文只是博主的一点点Java学习笔记,往后可能会继续更新,谢谢大家的浏览支持! ...

weixin_46476301的博客 352

python学习八:网络编程初探

from socket import * HOST = "localhost" PORT = 21567 BUFSIZE = 1024 ADDR = (HOST, PORT) tcpCliSock = socket(AF_INET, SOCK_STREAM) tcpCliSock.connect(ADDR) while True: data = raw_input('>') if not

linux4fun的专栏 762

alin的学习之路(Linux网络编程:八)(libevent库)

alin的学习之路(Linux网络编程:八)(libevent库) 1. libevent库 1. 优点 开源 精简 跨平台 专注于网络通信 ——可以借助fd来进行 pipe、fifo 等通信 2. 下载安装 下载地址:https://libevent.org/ 解压缩:tar zxvf libevent-2.1.8-stable.tar.gz 源码包安装: 如果有 README、readme 文件, 参考安装。 ./configure 检查安装环境,生成 makefile 文

alin的博客 503

java基础类库学习(八)网络编程,对网络支持的类

API中对网络支持的类:C:\Users\27375\Desktop\java\src\jdk-8-src\java\net包下 java对TCP的网络通信支持,java也对UDP提供支持 利用ServerSocket建立TCP服务器端,利用Socket建立TCP客户端 java的网络通信:服务端通过ServerSocket建立监听,客户端通过Socket连接到指定服务器后,通信双方通过IO...

Mar.三月 257
上一篇: 网络编程学习(七)
下一篇: 网络编程学习(九)
qq69696698
博客等级 码龄17年 97粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值