socket 及 字节序转换(嵌入式学习)

news2024/9/25 7:26:08

socket 及 字节序转换

  • socket简介
    • Socket
    • 为什么需要Socket?
    • socket类型
    • Socket通信模型
  • 字节序
    • 主机字节序到网络字节序
    • 网络字节序到主机字节序
    • IP地址转换

socket简介

1、1982 - Berkeley Software Distributions 操作系统引入了socket作为本地进程之间通信的接口
2、1986 - Berkeley 扩展了socket 接口,使之支持UNIX 下的TCP/IP 通信
3、现在很多应用 (FTP, Telnet) 都依赖这一接口

Socket

1、是一个编程接口
2、是一种特殊的文件描述符 (everything in Unix is a file)
3、并不仅限于TCP/IP协议
4、面向连接 (Transmission Control Protocol - TCP/IP)
5、无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)

为什么需要Socket?

普通的I/O操作过程
1、打开文件->读/写操作->关闭文件
2、TCP/IP协议被集成到操作系统的内核中,引入了新型的“I/O”操作
3、进行网络通信的两个进程在不同的机器上,如何连接?
4、网络协议具有多样性,如何进行统一的操作 需要一种通用的网络编程接口:Socket

socket类型

流式套接字(SOCK_STREAM) TCP
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
数据报套接字(SOCK_DGRAM) UDP
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
原始套接字(SOCK_RAW)
可以对较低层次协议如IP、ICMP直接访问。

Socket通信模型

个进程来进行处理

端口号
1、为了区分一台主机接收到的数据包应该转交给哪,使用端口号来区分
2、TCP端口号与UDP端口号独立
3、端口号一般由IANA (Internet Assigned Numbers Authority) 管理
4、端口用两个字节来表示 2byte
众所周知端口:1-1023(1-255之间为众所周知端口,256~1023端口通常由UNIX系统占用)
已登记端口:1024~49151
动态或私有端口:49152~65535

字节序

小端序(little-endian) - 低序字节存储在低地址 (主机字节序)
大端序(big-endian)- 高序字节存储在低地址 (网络字节序)

网络中传输的数据必须使用网络字节序,即大端字节序

笔试题:写一个函数,判断当前主机的字节序?

方式:共用体、指针强转、数据类型强转

主机字节序到网络字节序

u_long htonl (u_long hostlong);
u_short htons (u_short short);  //掌握这个  

网络字节序到主机字节序

u_long ntohl (u_long hostlong);
u_short ntohs (u_short short);

IP地址转换

typedef uint32_t in_addr_t;
struct in_addr {
    in_addr_t s_addr;
};
in_addr_t inet_addr(const char *cp);  //从人看的ip地址转为机器使用的32位无符号整数
char *inet_ntoa(struct in_addr in);  //从机器到人

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP MDG —— 使用DIF导入物料主数据 Part2 配置和应用

文章目录关于使用DIF处理物料主数据的相关信息配置定义数据传输对象类型 Object Types文件源和存档目录Web Dynpro 应用导入选项MDG_BS_FILE_IMPORT 的选择项本章小结关于使用DIF处理物料主数据的相关信息 配置 定义数据传输对象类型 Object Types 路径: MDGIMG-…

读懂AUTOSAR :DiagnosticLogAndTrace DLT(四)-- API解析

一、周期调用的函数:Dlt_TxFunction 根据参数DltGeneralTrafficShapingSupport,决定如何去发送DLT消息。如果为TRUE,那需要参考参数DltLogChannelTrafficShapingBandwidth为每个Log通道设置发送带宽;如果为FALSE,那么…

《LKD3粗读笔记》(9)内核同步介绍

文章目录1、临界区和竞争条件2、 加锁3、死锁4、争用和扩展性实现内核同步的意义是什么? 目前内核支持SMP,所以共享资源一定要防止并发访问,如果多个执行线程同时访问和操作数据,就可能发生各线程之间相互覆盖共享数据情况&#x…

ABeam News | 松下家电(中国)生产销售一体化SAP S/4HANA项目正式启动

近日,由德硕管理咨询(上海)有限公司参与实施的松下家电(中国)生产销售一体化SAP S/4HANA项目正式上线,松下集团代表董事全球副总裁本间哲朗先生及ABeam大中华区董事长兼总经理中野洋辅先生出席了项目启动会…

【实验报告】实验二 图像空间域频率域滤波

一.实验目的: 1. 模板运算是空间域图象增强的方法,也叫模板卷积。 (1)平滑:平滑的目的是模糊和消除噪声。平滑是用低通滤波器来完成,在空域中全是正值。 (2)锐化&…

【超全总结】集成环信消息推送注意事项(华为、oppo、vivo等)

环信即时通讯 IM 支持集成第三方厂商的消息推送服务,为 Android 开发者提供低延时、高送达、高并发、不侵犯用户个人数据的离线消息推送服务。 当客户端应用进程被关闭等原因导致用户离线,环信即时通讯 IM 服务会通过第三方厂商的消息推送服务向该离线用…

鸿蒙Service Ability的前世今生--进阶篇

二、SA的配置 ​ SA的运行需要配合多个配置项,此节专门对此进行说明。 ​ OpenHarmony中SA一般由两个配置文件和一个so组成。上一章节已介绍了生成so中代码。此节描述下另外两个配置文件(.cfg或.rc、xml)。 ​ SA的启动一般采用.cfg或.rc .xml libxxx.z.so方式…

Python 编程必不可少的unittest测试框架

一段表面看起来平平无常的代码,很可能暗藏很多bug无法一眼看透,没有经过测试的代码是不可靠的代码。上一篇讲过pytest测试框架这次我们换个框架。 unittest 是一个单元测试框架,单元测试完成对一个模块、一个类或一个函数的运行结果进行检验…

SpringSecurity之注销与自动登录

前言 前面我们讲解了用户的登录以及用户授权的过程。今天我们看一下,系统中常用的注销与自动登录各功能! 注销操作 注销操作,首先需要在我们的配置类中添加上我们的注销路径。主要配置详见下方标红处代码,标记了退出的路径以及…

java轻量级框架MiniDao的详解

MiniDao是一款基于Java语言开发的轻量级持久层框架,它的目标是简化数据库操作流程,提高开发效率,减少代码量。MiniDao采用简单的注解配置方式,可以很容易地与Spring等常用框架集成使用。 MiniDao的主要特点包括: 简单…

浙大数据结构网课第一周入门

题目详情 Given a sequence of K integers { N1​, N2​, ..., NK​ }. A continuous subsequence is defined to be { Ni​, Ni1​, ..., Nj​ } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For …

RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)RBF神经网络训练部分

1.清空变量 close all clear,clc 2.导入数据用以RBF神经网络训练,一共14组,训练数据P(第一列为电压值,第二列为SOC值,第三列为电流值。),并将所有数据存储在变量PP中,所有电压数据…

蓝桥杯:优秀的拆分

蓝桥杯:优秀的拆分https://www.lanqiao.cn/problems/801/learning/ 目录 题目描述 输入描述 输出描述 输入输出样例 输入 输出 输入 输出 题目分析(位运算) AC代码(Java) 题目描述 一般来说,一个正整数可以拆…

【】:addService 和 getService

一次完整的 Binder IPC 通信过程通常是这样: 首先 Binder 驱动在内核空间创建一个数据接收缓存区; 接着在内核空间开辟一块内核缓存区,建立内核缓存区和内核中数据接收缓存区之间的映射关系,以及内核中数据接收缓存区和接收进程用…

无线传感器网络硬件设计简介

无线传感器网络硬件设计简介 无线传感器网络因其巨大的应用前景越来越受到学术界和工业界的广泛关注。本文介绍了无线传感器网络节点的体系结构,分析比较了国内外当前典型的硬件平台,重点讨论了目前无线传感器网络节点常用的处理器、射频芯片、电源和传…

孩子为什么不能玩抖音精彩回答,共勉

2 可是,为什么我的同学、哥哥姐姐…… 反正身边好多人都在玩? 我不知道你父母有没有告诉你这个道理: 你把时间花在哪儿, 你就会成为什么样的人。 他们爱玩,是因为两个字: 空虚。 想象一下&#xff…

02、Cadence使用记录之创建元器件---原理图和封装(OrCAD Capture CIS)

02、Cadence使用记录之创建元器件—器件原理图符号和封装(OrCAD Capture CIS) 参考的教程是B站的视频:allegro软件入门视频教程全集100讲 前置教程: ## 01、Cadence使用记录之新建工程与基础操作(原理图绘制&#xf…

新闻文本分类任务:使用Transformer实现

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

13.网络爬虫—多进程详讲(实战演示)

网络爬虫—多进程详讲 一进程的概念二创建多进程三进程池四线程池五多进程和多线程的区别六实战演示北京新发地线程池实战 前言: 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域新星创作者&#xff0c…

Spark SQL实战(07)-Data Sources

1 概述 Spark SQL通过DataFrame接口支持对多种数据源进行操作。 DataFrame可使用关系型变换进行操作,也可用于创建临时视图。将DataFrame注册为临时视图可以让你对其数据运行SQL查询。 本节介绍使用Spark数据源加载和保存数据的一般方法,并进一步介绍…