第一章 网络编程基础

2023-05-16

网络编程基础

1. 网络编程基础概念

对于C/C++编程人员来说,网络编程的本质实际就是使用系统提供的网络编程接口,完成应用程序的网络数据收发功能。

在这里插入图片描述

2. 网络编程核心概念

网络编程中一般我们会经常听到一些概念,如地址、端口号、协议等。

地址:网络通讯中用于标志设备的整数值,如192.168.1.1,一个IP可以标志一个网卡设备,拿个单网卡的机器举例,一个IP指定了网络传输时往哪台机器上面发送;一台机器上面一般都会运行着很多个应用程序,如何判断数据是发往哪个应用程序的,这就要涉及到端口号

端口号:用于标记具体的连接的整型值(1~65535)

协议:网络中的数据传输交互时,定义的规则

角色:根据作用可分为服务端和客户端两种角色,其中,服务端表示等待连接的设备,客户端表示发起连接的设备。

在这里插入图片描述

3. 网络字节序

不同CPU中,4字节整数值在内存空间的保存方式是不同的。如4字节整数值1可用二进制表示如下两种形式:

  1. 00000000 00000000 00000000 00000001
  2. 00000001 00000000 00000000 00000000

若不考虑这些就收发数据则会发生数据错乱问题,因为保存顺序的不同意味着对接收数据的解析顺序也不相同。

在解决这个问题之前先了解两个概念。

  • 大端模式:数据低字节放在内存的高地址中
  • 小端模式:数据低字节放在内存的低地址中

举个例子,假设在0x20号开始的地址中保存4字节int类型书0x12345678,0x12是数据最高位,0x78是数据最低位;所以大端模式中低字节放在低地址中,0x78放在0x103,小端模式中0x78放在0x100,如下图

在这里插入图片描述

目前主流的英特尔CPU以小端模式保存数据,平时常用的51单片机就属于大端模式CPU。

网络字节序:网络传输数据时约定的统一数据传输方式,即大端模式,数据传输时先把数据数组统一转化为大端序格式再进行网络传输。所以在小端系统中需要做字节序转换。
但是直接使用linux接口时,除了sockaddr_in结构体外,数据传输时,数据的大小端模式会自动进行转换,无需考虑字节序的问题.
其中,sockaddr_in实际是一个保存IPV4类型地址的结构体

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第一章 网络编程基础 的相关文章

  • 【2021最新版】RabbitMQ面试题总结(32道题含答案解析)

    文章目录 1 什么是rabbitmq xff1f 2 为什么要使用rabbitmq xff1f 3 使用rabbitmq的场景 4 如何确保消息正确地发送至RabbitMQ xff1f 如何确保消息接收方消费了消息 xff1f 5 如何避免
  • 忘记mysql密码后如何修改密码(2022最新版详细教程保姆级)

    忘记mysql密码后如何修改密码 注意事项步骤 注意事项 一共用到两个cmd窗口 xff0c 每一个都要以管理员身份打开 xff0c 且在修改密码后 xff0c 要先关闭第一个跳过验证密码的mysql服务的cmd窗口 xff0c 再启动my
  • 忘记密码时如何修改mysql密码

    前言 近期学习j2ee开发时 xff0c 初步接触MySQL xff0c 偶然发现以往安装MySQL时修改的密码忘记 xff0c 于是查找资料学习了如何在忘记密码的情况下改变MySQL密码 以下为末学个人简介 xff0c 有不周之处 xff
  • 快速入手node.js

    目录 1 什么是 Node js 2 fs模块 3 path模块 4 http 模块 1 IP 地址 2 域名和域名服务器 3 端口号 4 创建 web 服务器的基本步骤 1 什么是 Node js Node js是让Javascript脱
  • 快速掌握 MyBatis 框架(二)

    文章目录 一 前言 1 1 数据库与表1 2 实体类1 3 MyBatisX 插件1 4 SQL 日志查看配置 二 多表查询 2 1 一对一2 2 一对多 三 动态 SQL 使用 3 1 lt if gt 标签3 2 lt trim gt
  • Cesium加载离线地图和离线地形

    文章目录 前言一 Cesium加载离线地图 1 1 下载数据2 2 数据处理2 3 地图发布2 4下载速度改进 二 Cesium加载离线地形 2 1 下载数据2 2 数据处理2 3 地形发布2 4 遇到的问题 前言 直接把地图数据切片 xf
  • Charles抓包显示<unknown>解决方案

    上篇 xff1a Charles抓包微信小程序数据 charles抓包会出现 xff0c 请求前都加了锁 xff0c 具体地址为的情况 解决问题 首先电脑上需要安装charles xff0c 然后需要设置手机上的WiFi设置 xff0c 修
  • Chrome 配置samesite=none方式

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言二 解决方案 1 方案一 xff1a 修改浏览器配置2 方案二 xff1a 使用Nginx3 方案三 xff1a 若服务器为
  • Chrome插件开发入门

    视频作者 xff1a 猿伙伴的个人空间 哔哩哔哩 bilibili 源码 xff1a https pan baidu com s 1EUOUo6QwHezyddmslyFsJQ 提取码 xff1a xtex 目录 一 第一个插件helloW
  • CISP-PTE真题演示

    周末帮好兄弟做PTE的真题 xff0c 觉得确实挺有意思的 xff0c 于是就有了这篇文章 xff0c 侵删侵删哈 第一阶段 基础题目一 xff1a SQL注入 所谓SQL注入 xff0c 就是通过把SQL命令插入到Web表单提交或输入域名
  • python循环性能pk

    python循环性能pk 在任何一种编程语言中 xff0c 循环都是非常消耗时间的操作 假设任意一种简单的单步操作耗费的时间是1个单位 xff0c 将此操作重复执行上万次 xff0c 最终耗费的时间也将增长上万倍 众所周知 xff0c py
  • Java程序员必读的入门&进阶书单

    外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img lZRiIYGZ 1659350372441 http static chayuqing com edddeb70713efa2da69e953240a5b3ab
  • Java程序员怎样进阶

    对于很多学习Java的程序员来说 xff0c 回过头来看入门Java的过程并不难 xff0c 反而是学到后期感觉没有进步 xff0c 尤其是对于一个进军编程界的两三年的Java程序员来说 xff0c 工作如果还只是增删改查 xff0c 这可
  • java程序员该如何进阶?这份java中高级核心知识全面解析请收好

    Java中高级核心知识全面解析 是整理收录GitHub50K 43 Star以上的高质量学习文档 xff0c 前前后后花了近半个月的时间 xff0c 终于整理而成 包含了Java基础 网络 Linux 数据结构与算法 数据库 系统设计 工具
  • MySQL的 DDL和DML和DQL的基本语法

    前言 SQL语句 xff0c 即结构化查询语言 Structured Query Language xff0c 是一种特殊目的的编程语言 xff0c 是一种数据库查询和程序设计语言 xff0c 用于存取数据以及查询 更新和管理关系数据库系统
  • MySQL的10种常用数据类型

    MySQL的数据类型 常用的数据类型有 xff1a 整型 xff08 xxxint xff09 位类型 bit 浮点型 xff08 float和double real xff09 定点数 xff08 decimal numeric xff0
  • MySQL的DATE_FORMAT()函数将Date转为字符串

    一 前言 最近要做一些报表 xff0c 其中有一个创建报表的时间 xff0c 需要以固定的格式输出 xff1b 那么在SQL层面如何处理呢 xff1f 二 DATE FORMAT 函数 要将日期值格式化为特定格式 xff0c 可以使用DAT
  • MySQL的on duplicate key update 的使用

    mysql的存在就更新不存在就插入实现 先建数据库表 xff0c 重点要添加主键索引 xff08 id列 xff0c 没有测试 xff09 和唯一索引 xff08 branch no列 xff09 xff0c 随便找表测试 INSERT I
  • MySQL的Replace用法详解

    replace into平时在开发中很少用到 xff0c 这次是因为在做一个生成分布式ID的开源项目 xff0c 调研雅虎推出的一个基于数据库生成唯一id生成方案 xff1a flickr 碰到的一个知识盲点 xff0c 仅以此篇记录一下
  • springboot之jar包Linux后台启动部署及滚动日志查看且日志输出至文件保存(超级详细)

    作者 xff1a bug菌 博客 xff1a CSDN 掘金等 公众号 xff1a 猿圈奇妙屋 特别声明 xff1a 原创不易 xff0c 转载请附上原文出处链接和本文声明 xff0c 谢谢配合 版权声明 xff1a 文章里可能部分文字或者

随机推荐

  • SpringBoot之异步方法

    1 Future Future代表异步计算的结果 提供了检查计算是否完成 等待其完成以及检索计算结果的方法 只有在计算完成后 xff0c 才能使用方法get检索结果 xff0c 如有必要 xff0c 将其阻塞 xff0c 直到准备就绪 取消
  • 8大基本数据类型:

    整数 xff1a byte IO流 文件输入输出 文件上传下载 数据保存硬盘 short 基本没卵用 int 大部分的整数 年龄 工作年限 long 比int大 浮点型 xff08 小数 xff09 xff1a float 基本没卵用 do
  • SpringBoot之自动装配原理

    1 自动装配的使用 Spring Boot的核心理念是简化Spring应用的搭建和开发过程 xff0c 提出了约定大于配置和自动装配的思想 开发Spring项目通常要配置xml文件 xff0c 当项目变得复杂的时候 xff0c xml的配置
  • SpringBoot使用AOP记录接口操作日志

    前言 xff1a 我们项目中可能有这种需求 xff0c 每个人请求了哪些接口 xff1f 做了什么事情 xff1f 参数是什么 xff1f 重要的接口我们需要记录操作日志以便查找 操作日志和系统日志不一样 xff0c 操作日志必须要做到简单
  • 修改Tomcat默认访问根目录

    Tomcat安装后 xff0c Tomcat的主目录是webapps root目录 在conf文件夹下面找到server xml 配置文件打开 在 中间添加一行 docBase即为默认访问的文件夹名称 Tomcat默认访问目录就是webap
  • 吐血整理 20 道 Spring Boot 面试题,我经常拿来面试别人

    面试了一些人 xff0c 简历上都说自己熟悉 Spring Boot 或者说正在学习 Spring Boot xff0c 一问他们时 xff0c 都只停留在简单的使用阶段 xff0c 很多东西都不清楚 xff0c 也让我对面试者大失所望 下
  • 大数据技术之hadoop——(四)历史服务器+常用脚本

    文章目录 前言 一 配置历史服务器 二 日志聚集 三 集群的停止与启动 四 常用脚本 五 常用端口号 前言 上一篇我们已经将hadoop完全分布式集群搭建完毕 xff0c 这一篇则作为完全分布式集群的补全操作 一 配置历史服务器 为了查看程
  • 富士康Java开发面试题目

    int leapyear int y 计算润年 if y 40 amp amp y 100 61 0 y 61 100 amp amp y 4000 return 1 else return 0 int day calculate int
  • 手把手教程SpringCloud gateway 结合nacos实现路由转发

    1 使用IDEA创建spring项目 xff0c JDK1 8 xff0c 无需添加依赖 2 添加spring cloud gateway和nacos lt dependencyManagement gt lt dependencies g
  • Dubbo服务降级

    dubbo降级服务 使用dubbo在进行服务调用时 xff0c 可能由于各种原因 xff08 服务器宕机 网络超时 并发数太高等 xff09 xff0c 调用中就会出现RpcException xff0c 调用失败 服务降级就是指在由于非业
  • JVM、JRE、JDK之间的联系与区别

    JVM JRE JDK之间的联系与区别 JVM xff08 Java Virtual Machine xff09 JVM xff08 Java虚拟机 xff09 是一个可执行Java字节码的虚拟机进程 用于解析编译后的字节码文件 JVM屏蔽
  • maven安装及配置

    maven安装及配置 xff08 详细版 xff09 1 下载 xff1a 可以从官方下载 xff0c 下载页面 xff1a http maven apache org download cgi 2 安装 xff1a maven压缩包解压到
  • 类加载的顺序

    1 父类静态对象和静态代码块 2 子类静态对象和静态代码块 3 父类非静态对象和非静态代码块 4 父类构造函数 5 子类 非静态对象和非静态代码块 6 子类构造函数
  • Java多线程之~~~~使用wait和notify实现生产者消费者模型

    在多线程开发中 xff0c 最经典的一个模型就是生产者消费者模型 xff0c 他们有一个缓冲区 xff0c 缓冲区有最大限制 xff0c 当缓冲区满 的时候 xff0c 生产者是不能将产品放入到缓冲区里面的 xff0c 当然 xff0c 当
  • 输入若干成绩(负数结束),计算平均值

    include lt stdio h gt define N 6 main float a N int i count 61 0 float sum 61 0 average for i 61 0 i lt N i 43 43 scanf
  • rabbitmq重启

    rabbitmqctl stop xff1a 停止rabbitmq rabbitmq server restart 重启rabbitmq
  • spring项目找不到Aspect注依赖注解

    昨天写一个项目的时候在使用Aspect时一直找不到依赖 xff0c alt 43 enter自动添加Maven依赖还是解决不了问题 上网找了资料才解决 xff0c 但是我现在忘了是参照哪个资料了 xff0c 不能写出参照网址 xff0c 实
  • 总结一下mybatis返回结果为空

    今天写mybatis的时候遇到了返回结果为空的现象 xff0c 找了半天 xff0c 决定记录一下 1 可能是字段的问题 数据库中的字段 xff1a user name xff0c user id java中的实体类 xff1a userN
  • 框架、组件漏洞系列4:Apache shiro漏洞汇总

    一 Apache Shiro 简介 1 什么是shiro Apache Shiro提供了认证 授权 加密和会话管理功能 xff0c 将复杂的问题隐藏起来 xff0c 提供清晰直观的API使开发者可以很轻松地开发自己的程序安全代码 并且在实现
  • 第一章 网络编程基础

    网络编程基础 1 网络编程基础概念 对于C C 43 43 编程人员来说 xff0c 网络编程的本质实际就是使用系统提供的网络编程接口 xff0c 完成应用程序的网络数据收发功能 2 网络编程核心概念 网络编程中一般我们会经常听到一些概念