Socket与字节序

news2024/11/17 6:31:59

一、Socket 

        "Socket"(套接字)是计算机网络编程中的一个重要概念,它提供了一种在网络上进行进程间通信的机制。套接字是一种抽象,它允许程序通过网络发送和接收数据。在通常的情况下,套接字用于实现不同计算机之间的通信,但它也可以在同一台计算机内的不同进程之间进行通信。

       所谓 socket (套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处 的地位来讲, 套接字上联应用进程,下联网络协议栈 ,是应用程序通过网络协议进行通信的接口, 是应用程序与网络协议根进行交互的接口。
        socket 可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它 是网络环境中进程间通信的 API ,也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 socket 中,该 socket 通过与网络接口卡( NIC )相连的传输介质将这段信息送到另外一台 主机的 socket 中,使对方能够接收到这段信息。 socket 是由 IP 地址和端口结合的 ,提供向应用层进程传送数据包的机制。
        socket 本身有 插座 的意思,在 Linux 环境下,用于表示进程间网络通信的特殊文件类型。本质为内 核借助缓冲区形成的伪文件 。既然是文件,那么理所当然的,我们可以使用 文件描述符 引用套接 字。与管道类似的,Linux 系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。

 二、字节序

       现代 CPU 的累加器一次都能装载(至少) 4 字节(这里考虑 32 位机),即一个整数。那么这 4 字节在内存中排列的顺序将影响它被累加器装载成的整数的值,这就是字节序问题。在各种计算机 体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问 题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如 果不达成一致的规则,通信双方将无法进行正确的编码/ 译码从而导致通信失败。
       字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序( 一个字节的数 据当然就无需谈顺序的问题了 )
        字节序分为大端字节序(Big-Endian ) 和小端字节序( Little-Endian )。大端字节序是指一个整数的最高位字节(23 ~ 31 bit )存储在内存的低地址处,低位字节( 0 ~ 7 bit )存储在内存的高地址处;小端字节序则是指整数的高位字节存储在内存的高地址处,而低位字节则存储在内存的低地址处。

#include <stdio.h> 
int main(){ 

union {
short value;//2字节
 char bytes[sizeof(short)];
}test; 

test.value 0x0102; 
if((test.bytes[0]=1)&&(test.bytes[1]=2)){ 
printf("大端字节序");}
else if((test.bytes[0]=2)&&(test.bytes[1]=1)){ 
printf(小端字节序") 
else printf("未知");
}

 

三、字节序转换函数 

        当格式化的数据在两台使用不同字节序的主机之间直接传递时,接收端常必然错误的解释之。解决问题的方法是:发端总是把要发送的数据转换成大端字节序数据后再发送,而接收端知宜对方传送过来的数据总是采用大端字节序,以接收端可以根据自身采用的字节序决定是香对接收到的数据进行转换(小端机转换,大端机不转换)。

        网络字节顺序(大端)是TCP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能被正确解释,网络字节顺序采用大端排序方式。 BSD Socket提供了封装的转换接口,方使程序员用。包括从主机字节序到络字节序的换函数: htons、htonl;从网络字节序到主机字节序的转换函数:ntohs、ntohl.

#include <stdio.h>
#include <arpa/inet.h>

int main(){
    
    // htons
    unsigned short a = 0x0102;
    unsigned short b = htons(a);
    printf("%x", b); 
    
// 如果你的机器是小端字节序,a在内存中的存储顺序是 02 01,而经过htons函数转换后,b在内存中的存储顺序是 01 02。

//如果你的机器是大端字节序,a在内存中的存储顺序是 01 02,而经过htons函数转换后,b在内存中的存储顺序是 02 01。

    //htonl转换IP 
    char buf[4]={192,168,1,100};
    int num *(int *)buf;
    int sum htonl(num);
    unsigned char *p (char *)&sum;
    printf("%d%d%d%d\n",*p,*(p+1),*(p+2),*(p+3));

// ntosl

    unsigned char buf1[4]{1,1,168,192}; 
    int num1 *(int *)buf1; 
    int sum1=ntohl(nm1);
    unsigned char *p1 (unsigned char *)&sum1; 
    printf("%d%d%d%d\n",*p1,*(p1+1),*(p1+2),*(p1+3)



    return 0; 
}

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

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

相关文章

【论文阅读+复现】SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models

SparseCtrl:在文本到视频扩散模型中添加稀疏控制。 &#xff08;AnimateDiff V3&#xff0c;官方版AnimateDiffControlNet&#xff0c;效果很丝滑&#xff09; code&#xff1a;GitHub - guoyww/AnimateDiff: Official implementation of AnimateDiff. paper&#xff1a;htt…

数据库开发之子查询的详细解析

1.4 子查询 1.4.1 介绍 SQL语句中嵌套select语句&#xff0c;称为嵌套查询&#xff0c;又称子查询。 SELECT * FROM t1 WHERE column1 ( SELECT column1 FROM t2 ... ); 子查询外部的语句可以是insert / update / delete / select 的任何一个&#xff0c;最常见…

SEGGER-RTT

wiki:https://wiki.segger.com/RTT 1.简介 Real Time Transfer&#xff08;简称RTT&#xff09;是Segger公司推出的用于嵌入式系统监控和交互的工具&#xff0c;其融合了SWO&#xff08;SWD调试技术中的调试日志输出&#xff09;等能力&#xff0c;且具备极高的性能。RTT的技术…

【JavaScript】Set、Map、WeakSet、WeakMap

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

【K8S 二进制部署】部署Kurbernetes的网络组件、高可用集群、相关工具

目录 一、K8S的网络类型&#xff1a; 1、K8S中的通信模式&#xff1a; 1.1、、pod内部之间容器与容器之间的通信 1.2、同一个node节点之内&#xff0c;不同pod之间的通信方式&#xff1a; 1.3、不同node节点上的pod之间是如何通信的呢&#xff1f; 2、网络插件一&#xff…

找不到msvcp140.dll怎么办-msvcp140.dll丢失的解决方法分享

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。那么&#xff0c;msvcp140.dll究竟是什么文件&#xff1f;为什么会出现丢失的情况&#xff1f;本文将详细介绍msvcp140.dll的属性、作用以及丢失的原因&#xff0c;并…

1. pytorch mnist 手写数字识别

文章目录 一、数据集介绍1.1、简介1.2 详细介绍1、数据量2、标注量3. 标注类别4.数据下载5.数据集解读 二、读取、加载数据集1、pytorch 自带库函数2、通过重构Dataset类读取特定的MNIST数据或者制作自己的MNIST数据集 三、模型构建四、 runtraintest评估模型的性能检查点的持续…

element-plus修改主题颜色

一、自定义scss文件 在src\css\styles\element目录下新建index.scss 代码如下 forward "element-plus/theme-chalk/src/common/var.scss" with ($colors: ("primary": ("base": #d61b1a,"color": #fff,),) );use "element-plus…

STANFORD斯坦福FS725铷钟

FS725在一个紧凑的半宽2U机箱中集成了一个铷原子振荡器&#xff08;SRS型号PRS10&#xff09;、一个低噪声通用交流电源和分配放大器。它提供稳定和可靠的性能&#xff0c;估计20年的老化率低于510-9&#xff0c;并证明铷原子振荡器的MTBF超过20万小时。FS725是校准和研发实验室…

【JavaWeb学习笔记】18 - 文件上传下载

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/fileupdown 目录 文件上传 一、基本介绍 二、文件上传的基本原理 ​编辑 三、文件上传应用实例 四、文件上传的注意细节 1.解决中文乱码问题 2.分割文件夹 3.防止重名 4.百度WebUploader 5.空…

Doris:为企业数据查询加速

Doris是一款由百度开发的开源数据仓库查询引擎&#xff0c;它能够帮助用户高效地查询和分析大规模数据。Doris具有高性能、易用性强、可扩展性高等特点&#xff0c;让数据分析变得更加简单。 二、场景&#xff1a; Doris适用于各种数据仓库场景&#xff0c;无论是大数据分析、…

搭建WebDAV服务+cpolar内网穿透公网同步Zotero科研文献

文章目录 一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 Zotero 是一款全能型 文献管理器,可以 存储、管理和引用文献&#xff0c;不但免费&#xff0c;功能还很强大实用。 ​ Zotero 支…

图灵日记之java奇妙历险记--类和对象

目录 类的定义和使用类的定义格式 类的实例化类和对象的说明 this引用this引用的特性 对象的构造及初始化就地初始化构造方法 封装包导入包中的类自定义包 static成员static修饰成员变量static修饰成员方法 代码块代码块概念及分类构造代码块静态代码块 匿名对象 类的定义和使用…

Python入门学习篇(十)——函数定义函数传参方式

1 相关定义和概念 1.1 函数的理解 一段被封装的可以重复调用的代码。 1.2 函数定义语法结构 def 函数名(形参1,形参2):要封装的逻辑代码 # 注意:函数可以有返回值也可以没有返回值,没有返回值的结果是None1.3 函数调用的语法结构 函数名(形参1,形参2)1.4 简单实例 1.4.1 …

不浪费时间,昂首资本1分钟如何快速学习MT4价差

不要浪费时间在手工计算上&#xff0c;昂首资本解释一下如何快速学习MT4价差&#xff0c;。 想要在MT4中输入交易时&#xff0c;需要在交易窗口中设置未来交易的参数。在同一个窗口中&#xff0c;可以看到卖价和买价。如果在上面的例子中比较这两个价格&#xff0c;就会发现两…

如何查看NX UI对话框内的控件(使用UIFW侦查)

一、概述 在NX二次开发中有很多命令从界面上看起开相似&#xff0c;但实质确不同&#xff0c;个人人为一是出于对软件产权的保护&#xff0c;增加二次开发的难度&#xff0c;二是由于NX在不断地发展和版本交替中为了保留老用户的操作习惯&#xff0c;故意用新控件做成老控件的…

LeetCode刷题--- N 皇后

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递归…

模式识别与机器学习-特征选择和提取

模式识别与机器学习-特征选择和提取 特征选择一些距离测度公式独立特征的选择准则一般特征的散布矩阵准则 离散K-L变换 谨以此博客作为复习期间的记录。 常见分类问题的流程&#xff0c;数据预处理和特征选择提取时机器学习环节中最重要的两个流程。这两个环节直接决定了最终性…

数模学习02-Matlab基础知识入门

先把matlab下载好。然后你就会发现电脑有少了几十个GB。服啦~ 修改字体 字体真的是太小了&#xff0c;其实我无论是使用什么编辑器我一般都会先改字体&#xff0c;字体在开始中有一个预设&#xff0c;可以修改字体&#xff0c;这样眼睛看着也会舒服一点 命令行窗口的使用 这…