一些概念

简单了解一下TCP,UDP这两个协议,和一些概念

TCP与UDP

学校教过TCP是

  • 传输层协议
  • 有连接
  • 可靠传输
  • 面向字节流


而UDP是

  • 传输层协议
  • 无连接
  • 不可靠传输
  • 面向数据报

当时完全不知道这些什么意思

网络字节序

网络通信,要接收和发送数据。我们知道机器分为大端和小端存储,那传输数据的时候就需要一个固定的标准,防止出错。
于是有了:TCP/IP规定的网络字节序,低地址高字节

1.发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出;
接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存;
2.因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址.
TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节. 不管这台主机是大端机还是小端机,
都会按照这个TCP/IP规定的网络字节序来发送/接收数据;
3.如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可;

在这里插入图片描述

主机序列与网络序列的相互转换

在头文件<arpa/inet.h> 给了4个接口

函数含义作用
htonshost to network short本地主机的 16 位整数转为网络序
htonlhost to network long本地主机的 32 位整数转为网络序
ntohsnetwork to host short网络序的 16 位整数转为主机序
ntohlnetwork to host long网络序的 32 位整数转为主机序

Socket编程

sockaddr

sockaddr是网络通信的通用结构体

struct sockaddr {sa_family_t sa_family; // 地址族(协议族),如 AF_INETchar sa_data[14];      // 协议地址(具体内容依赖于地址族)
};

还有另外两个结构体:

  1. sockaddr_in
struct sockaddr_in {sa_family_t sin_family;   // 地址族,必须是 AF_INETuint16_t sin_port;        // 端口号(网络字节序)struct in_addr sin_addr;  // IP 地址char sin_zero[8];         // 填充字节,保持与 sockaddr 一致
};

特别提示: sin_addr
结构体in_addr封装如下

struct in_addr {in_addr_t s_addr; // IPv4 地址,32 位,网络字节序
};

所以赋值的时候:要对s_addr进行操作

addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 点分十进制转网络字节序

地址类型给AF_INET,表示网络通信
2. sockadd_un

struct sockaddr_un {sa_family_t sun_family;     // 地址族,必须是 AF_UNIXchar sun_path[108];         // 本地文件路径,作为套接字标识
};

地址类型给AF_UNIX,表示本地通信
在这里插入图片描述

IP地址格式

IP地址有点分十进制(“127.0.0.1”)和十六进制4字节序列(0xC0A80101)

点分十进制是为了方便阅读,但是,s_addr是4字节序列的格式,像下面这样

addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 点分十进制转网络字节序

就需要调用函数来进行转换

函数作用
inet_aton点分十进制 → 4 字节网络序
inet_ntop4 字节网络序 → 点分十进制
in_addr_t inet_addr(const char *cp);

网络字节序再转换一次?

转换为4字节序列后,需要转换成网络字节序再存入sockaddr_in

好消息,好消息!
inet_addr先完成转换到4字节序列,再转换为网络字节序

// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);
// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
// 开始监听socket (TCP, 服务器)
int listen(int socket, int backlog);
// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address,
socklen_t* address_len);
// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

补充:内存置0另一种方法(bzero与memset)

memset很常用,这里补充一个新的接口

void bzero(void *s, size_t n);
//s:指向要清零的内存块的起始地址。
//n:要清零的字节数。

举个例子

struct sockaddr_in addr;
bzero(&addr, sizeof(addr));

他等价于

memset(&addr, 0, sizeof(addr));

当然:依然推荐用memset
因为bzero 在 POSIX 标准中已废弃

小结

介绍了socket基本概念和socket初始化的操作

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI时代的弯道超车之第二十七章:AI技术的发展方向

在这个AI重塑世界的时代,你还在原地观望吗?是时候弯道超车,抢占先机了! 李尚龙倾力打造——《AI时代的弯道超车:用人工智能逆袭人生》专栏,带你系统掌握AI知识,从入门到实战,全方位提升认知与竞争力! 内容亮点: AI基础 + 核心技术讲解 职场赋能 + 创业路径揭秘 打破…

RabbitMQ用法的6种核心模式全面解析

文章目录**一、RabbitMQ核心架构解析**1. AMQP协议模型2. 消息流转原理**二、六大核心用法详解****1. 简单队列模式&#xff08;Hello World&#xff09;****2. 工作队列模式&#xff08;Work Queues&#xff09;****3. 发布/订阅模式&#xff08;Pub/Sub&#xff09;****4. 路…

深入协程调试:协程调试工具与实战

本文系统梳理主流协程调试工具&#xff0c;结合完整代码示例与实战技巧&#xff0c;助你高效解决异步编程难题一、协程调试的核心挑战 协程的非线性执行流是调试的最大挑战&#xff1a; 传统断点调试难以追踪协程切换堆栈信息不完整或丢失上下文并发竞争条件难以复现 #mermaid-…

Git 日常开发实战命令大全

&#x1f9f0; Git 日常开发实战命令大全 本文整理了 Git 在日常开发中高频使用的命令集合&#xff0c;覆盖从基础操作到进阶技巧的完整流程&#xff0c;方便留存查阅&#x1f440; &#xff0c;最后附上所有指令。其中内容包括&#xff1a; ✅ 本地仓库管理&#xff1a;添加文…

力扣 hot100 Day37

25. K 个一组翻转链表 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是…

【力扣 中等 C】516. 最长回文子序列

目录 题目 解法一 题目 待添加 解法一 int max(int a, int b) {return a > b ? a : b; }int longestPalindromeSubseq(char* s) {const int len strlen(s);int dp[len];for (int i len - 1; i > 0; i--) {dp[i] 1;int leftDown;if (i 1 < len) {leftDown dp…

DAY 54 Inception网络及其思考

知识点回顾&#xff1a; 传统计算机视觉发展史&#xff1a;LeNet-->AlexNet-->VGGNet-->nceptionNet-->ResNet 之所以说传统&#xff0c;是因为现在主要是针对backbone-neck-head这样的范式做文章 inception模块和网络特征融合方法阶段性总结&#xff1a;逐元素相加…

1. 微服务架构演进:从单体到SpringCloud

想象一下,你刚刚花了一个下午在生产环境下部署一款单体应用,结果因为一个微小的配置变动,整个系统宕机,大量用户投诉蜂拥而至。运维紧急回滚,开发又要加班定位问题……这并非孤立事件,而是单体架构在规模和复杂性增长后常见的“连锁反应”。 一、单体架构:简单之始,复杂…

Charles 中文版抓包工具详解:加速 API 调试与网络问题排查

随着技术的不断发展&#xff0c;开发者面临的任务日益复杂&#xff0c;特别是在调试和优化API接口时。确保应用的网络请求在各种环境下的稳定性和高效性是提高用户体验的关键。Charles抓包工具作为一款强大的网络调试工具&#xff0c;能够帮助开发者精确捕获HTTP/HTTPS流量&…

巅峰对话:文心4.5 vs DeepSeek R1 vs 通义Qwen3.0 深度评测

国产大模型三强争霸&#xff0c;谁主沉浮&#xff1f; 2025年是中国大模型开源爆发之年——百度文心4.5系列横空出世&#xff0c;阿里通义Qwen3.0登顶开源榜首&#xff0c;而DeepSeek R1在编程领域悄然登顶。 三大技术路线齐头并进&#xff0c;却走出了截然不同的道路。 在这…

Linux运维安全新范式:基于TCPIP与SSH密钥的无密码认证实战

文章目录 前言1. Linux 生成SSH秘钥对2. 修改SSH服务配置文件3. 客户端秘钥文件设置4. 本地SSH私钥连接测试5. Linux安装Cpolar工具6. 配置SSHTCP公网地址7. 远程SSH私钥连接测试8. 固定SSH公网地址9. 固定SSH地址测试 前言 在云原生架构全面渗透企业IT体系的当下&#xff0c;…

行阶梯形矩阵和行最简形矩阵的区别

目录 0、主元 一、行阶梯形矩阵&#xff08;REF&#xff09; 特点&#xff1a; 二、行最简形矩阵&#xff08;RREF&#xff09; 特点&#xff1a; 0、主元 主元是&#xff1a;该行最左侧的非零元素​​&#xff08;即第一个不为零的元素&#xff09;。 一、行阶梯形矩阵&…

力扣 3258 统计满足 K 约束的子字符串数量 I 题解

此题不评价&#xff0c;有点意思&#xff0c;我在次以两种语言python 和c&#xff0c;用两种相反的思路写&#xff0c;注意细节不同。 原题链接3258. 统计满足 K 约束的子字符串数量 I - 力扣&#xff08;LeetCode&#xff09; 法一&#xff0c;c&#xff0c;先统计出不符合的…

创意Python爱心代码

创意Python爱心代码分享的技术文章大纲 引言 简述Python在图形绘制和创意编程中的优势介绍爱心代码在编程社区中的受欢迎程度本文涵盖的创意爱心代码示例及其技术亮点 基础爱心绘制 使用数学公式和turtle库绘制简单爱心代码示例&#xff1a; import turtle def draw_heart…

OSPF路由过滤

一、概述 OSPF对接收的路由的过滤适用于任意OSPF路由器&#xff0c;是通过对接收的路由设置过滤 策略&#xff0c;只允许通过过滤策略的路由被添加到本地设备的IP路由表中&#xff08;对进入OSPF路由表不进行过滤&#xff09;&#xff0c;这主要是为了减小本地设备的IP路由表规…

NPM组件 nodemantle002 等窃取主机敏感信息

【高危】NPM组件 nodemantle002 等窃取主机敏感信息 漏洞描述 当用户安装受影响版本的 nodemantle002 等NPM组件包时会窃取用户的主机名、用户名、工作目录、IP地址等信息并发送到攻击者可控的服务器地址。 MPS编号MPS-qrk7-ayms处置建议强烈建议修复发现时间2025-07-04投毒…

山东布谷科技RC物联网络远程遥控车项目源码开发:直播行业的新机遇

在当今数字化时代&#xff0c;直播行业发展得如火如荼&#xff0c;各类基于直播的创新项目不断涌现。从 2024 年的弹幕游戏到 2025 年的RC远控车项目&#xff0c;这些都是泛直播行业衍生出的极具潜力的流量项目玩法。其中&#xff0c;山东布谷鸟网络科技有限公司推出的RC远程遥…

2025年全国青少年信息素养大赛图形化(Scratch)编程小学低年级组初赛样题答案+解析

2025年全国青少年信息素养大赛图形化&#xff08;Scratch&#xff09;编程初赛样题答案解析 &#xff08;一&#xff09;分级/分组内容 本赛项晋级过程包括初赛&#xff08;在线预选赛&#xff09;、复赛&#xff08;地区选拔赛&#xff09;和决赛&#xff08;全国总决赛&…

SVG 绘图专家智能体prompt集锦:Claude、deepseek版本(一)

文章目录 0 SVG(可缩放矢量图形)0.1 SVG提示词通用模板0.2 小红书风格模版0.3 技术路线图0.4 甘特图0.5 数据可视化0.6 原型图 1 李继刚Claude Prompt1.1 知识卡片1.2 将真心话转化为周报1.3 三行情书1.4 将产品卖点转换为用户买点1.5 毒舌暖心师1.6 段子手1.7 输出反转笑话1.8…

CDN分发加速技术详解

CDN核心原理与架构1. 基本工作原理边缘节点缓存&#xff1a;将内容分发到离用户最近的边缘服务器DNS智能解析&#xff1a;引导用户访问最优节点内容预取与缓存&#xff1a;热点内容提前部署到边缘2. 典型CDN架构组成用户请求 → 智能DNS → 边缘节点(Edge Server)↑二级节点(Mi…