Linux编程4.7 网络编程-套接字与地址

1、因特网地址结构

struct in_addr{
	in_addr_t s_addr;             /*ipv4地址*/
}

struct sockaaddr_in{
	short int sin_family;          /*Internet地址族,如AF_INET(主机字节序)*/ 
	unsigned short int sin_port;   /*端口号,16位值 (网络字节序)*/
	struct in_addr sing_addr;      /*Internet地址,32伴IPV4地址(网络字节序)*/
	unsigned char sin_zero[8];     /*添0(为了格式对齐的填充位)*/
}

这两个数据类型是等效的,可以相互转换,通常使用sockaddr_in更为方便。
在这里插入图片描述

2、IPV4地址族和字符地址间的转换

#include <arpa/inet.h>

const char *inet_ntop(int domain, const void *restrict addr,char *restrict str, socklen_t size);
返回:成功返回地址字符串指针,出错返回NULL
功能:网络字长离换成点分十进制

int inet_pton(int domain, const void *restrict str,char *restrict addr);
返回:成功返回1,无效格式返回0,出错返回-1
功能:点分十进制转换为网络字节序

参数:

  • domain:Internet地址族,如AF_INET
  • addr:Internet地址,32位IPV4地址(网络字节序)
  • str:地址字符串(点分十进制)指针
  • size:地址字符串大小

示例:
Internet
在这里插入图片描述

3、套接字与地址绑定

3.1、绑定地址
int bind(int sockfd,const struct sockaddr *addr,socklen_t len);
返回:成功返回0,出错返回-1

在这里插入图片描述

3.2、查找绑定到套按字的地址
#include<sys/socket.h>

int getsockname(int sockfd, struct sockaddr *restrict addr,socklen_t* restrict alenp);
返回:成功返回0,出错返回-1

在这里插入图片描述

3.3、获取对方地址
#include <sys/socket.h>

int getpeername(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict alenp);
返回:成功返回0,出错返回-1

二者区别:

  • getpeername只有在连接建立以后才调用,否则不能正确获得对方地址和端口,所以它的参数描述字一般是已连接描述字而非监听套接口描述字。
  • 没有连接的UDP不能调用getpeername,但是可以调用getsockname和TCP一样,它的地址和端口不是在调用socket就指定了,而是在第一次调用sendto函数以后。
  • 已经连接的UDP,在调用connect以后,这2个函数(getsockname,getpeername)都是可以用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/469480.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

upload-labs第二关第五关

upload-labs第二关 1、先上传个马试试&#xff0c;看看页面显示什么&#xff0c;要先把上次上传的马删掉哦 2、提示文件类型不正确&#xff0c;在看下提示说是在服务端做了检查 3、那就上传个php格式的&#xff0c;然后呢bp抓包把文件格式改了 4、修改后的 5、修改后发现不…

【物联网】Modbus 协议及应用

Modbus 协议简介 QingHub设计器在设计物联网数据采集时不可避免的需要针对Modbus协议的设备做相关数据采集&#xff0c;这里就我们的实际项目经验分享Modbus协议 简介 Modbus由MODICON公司于1979年开发&#xff0c;是一种工业现场总线协议标准。1996年施耐德公司推出基于以太…

ansible 运维自动化

pxe 一键安装操作系统 操作系统只是提供一个平台 lnmp 需要多软件协同完成的一个简单项目 服务器正常运行 日常运维 巡检 服务器上的软件正常运行 zabbix 普罗米修斯 系统调优&#xff0c;架构调优 前言 运维自动化 云计算核心职能 搭建平台架构 …

TCPIP协议总结

一、TCP的三次握手 TCP连接的建立时&#xff0c;双方需要经过三次握手&#xff0c;而断开连接时&#xff0c;双方需要经过四次分手&#xff0c;那么&#xff0c;其三次握手和四次分手分别做了什么呢&#xff1f;又是如何进行的呢&#xff1f; 通常情况下&#xff0c;建立连接的…

从零开始学习如何使用 Postman 请求头

当你在使用 Postman 发送请求时&#xff0c;请求头&#xff08;Headers&#xff09;是你可以包含在 HTTP 请求中的重要部分之一。请求头包含了关于请求的元数据信息&#xff0c;这些信息对于服务器来处理请求是非常重要的。下面是一份详细的图文介绍&#xff0c;说明了如何在 P…

电商数据采集效率开挂【Python电商数据采集API接口】

数据监测 监测线上电商平台的商品、店铺数据&#xff0c;包括商品销量/库存/价格/店铺等级/发货地/促销活动等信息&#xff0c;支持十多个国内主流电商平台。 在线维权 实现多平台在线一键投诉&#xff0c;与各大电商投诉平台系统对接&#xff0c;实时同步投诉进展。 渠道管…

C# visual studio 2022 学习2

类成员&#xff1a; 1.字段成员 字段只是类中声明的一个变量&#xff0c;用来在对象中存储信息。 &#xff08;1&#xff09;.静态字段 使用static关键字修饰的就是静态字段&#xff0c;静态字段属于类而不属于某个类实例&#xff0c;对它的访问使用“类名.静态字段名” &…

28-2 文件上传漏洞 - 双写绕过

环境准备&#xff1a;构建完善的安全渗透测试环境&#xff1a;推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、双写绕过原理 在代码编写过程中&#xff0c;双写绕过原理指的是只对黑名单中的内容进行一次空替换。由于只进行一次替换&#xff0c;导致了双写绕过的情况…

数据结构从入门到精通——排序的概念及运用

排序的概念及运用 前言一、排序的概念排序稳定性内部排序外部排序 二、排序运用三、常见的排序算法四、排序性能检测代码srand()clock() 五、oj排序测试代码 前言 排序是将数据按照一定规则重新排列的过程&#xff0c;常见规则有升序、降序等。排序算法如冒泡排序、快速排序等…

JavaScript中的继承方式详细解析

什么是继承 继承是面向对象编程中的一个重要概念&#xff0c;它指的是一个对象&#xff08;或类&#xff09;可以获得另一个对象&#xff08;或类&#xff09;的属性和方法。在继承中&#xff0c;被继承的对象通常称为父类&#xff08;或基类、超类&#xff09;&#xff0c;继…

C++关键字:static

文章目录 一、static的四大用法1.静态局部变量2.静态全局变量3.静态函数4.类中的 静态成员变量、静态成员函数 一、static的四大用法 1.静态局部变量 延长局部变量的生命周期。 1.与普通的局部变量不同&#xff0c;局部静态变量在函数调用结束之后&#xff0c;不会被销毁&am…

中国银联订单支付产品实施指南(2022.A 版)

为落实总行提出以银行账户为基础&#xff0c;全面提升对小微企业、民营企业的支付结算服务能力和水平的总体思路要求&#xff0c;践行支付为民&#xff0c;银联提出建设订单支付产品&#xff0c;通过深度融合企业线上线下支付场景&#xff0c;充分赋能商业银行B2B业务支付结算&…

数据结构奇妙旅程之红黑树

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

“团团活力圈”--“书香润童心 阅读伴成长”青少年读书分享活动

书籍是人类进步的阶梯&#xff0c;读书能够陶冶人的情操、开阔眼界&#xff0c;同时&#xff0c;通过读书&#xff0c;能够帮助人们增长知识&#xff0c;培养正确的人生观、价值观。为了帮助青少年多读书&#xff0c;感受读书的乐趣&#xff0c;3月17日&#xff0c;在共青团中央…

【代码】YOLOv8标注信息验证

此代码的功能是标注信息验证&#xff0c;将原图和YOLOv8标注文件&#xff08;txt&#xff09;放在同一个文件夹中&#xff0c;作为输入文件夹 程序将标注的信息还原到原图中&#xff0c;并将原图和标注后的图像一同保存&#xff0c;以便查看 两个draw_labels函数&#xff0c;分…

Ubuntu Desktop - Desktop

Ubuntu Desktop - Desktop 1. Amazon2. Ubuntu Software3. Desktop4. 系统桌面快捷方式5. 用户桌面快捷方式References 1. Amazon Amazon -> Unlock from Launcher 2. Ubuntu Software Installed -> Games -> Remove 3. Desktop /home/strong/Desktop 4. 系统桌面…

Java项目:65 ssm社区文化宣传网站+jsp

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本选题则旨在通过标签分类管理等方式&#xff0c; 实现管理员&#xff1b;个人中心、用户管理、社区新闻管理、社区公告管理、社区活动管理、…

React——开发者工具

浏览器插件&#xff1a;谷歌浏览器插件react-devtools 方式1&#xff1a;chrome应用商店添加 方式2&#xff1a;下载安装包放在浏览器上

32串口学习

基于之前的GPIO等工程&#xff0c;后面的上手难度就简单多了&#xff0c;主要是相关寄存器的设置。 void USART1_Config(void) {GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* config USART1 clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph…

可视化图表:雷达图的全面介绍,一篇就够了。

一、什么是雷达图 雷达图&#xff08;Radar Chart&#xff09;是一种可视化图表&#xff0c;也被称为蛛网图、星形图或极坐标图。它以一个中心点为起点&#xff0c;从中心点向外延伸出多条射线&#xff0c;每条射线代表一个特定的变量或指标。每条射线上的点或线段表示该变量在…