网络编程入门教程03——socket机制

【嵌入式开发之网络编程】Socket套接字及TCP、UDP通信的实现 是计算机网络的各层及其协议的集合,就是这个计算机网络及其构件所应完成的功能的精确定义(不涉及实现)。是遵循这种体系结构的前提下,用何种硬件或软件完成这些功能的问题。 阅读详情

再一次地,把网络7层模型放在前面:
在这里插入图片描述

1. socket的位置

在介绍了传输层(TCP/UDP)、网络层(IP),理论上,我们已经可以开始编写应用程序来使用这些层了。然而由于这些协议过于复杂,操作系统在应用程序与协议栈之间提供一个软件接口socket套接口。
在这里插入图片描述
第一个值得注意的地方就是socket套接口的位置,套接字承上启下,应用层可直接使用套接口实现网络编程。

2. socket类型

  • socket有三种类型,数据报、流式、原始。显然,前两者分别对应UDP和TCP,第三种则对应不是上述两者协议的。
  • 注意,只有相同的套接口直接才能进行通信。

3. socket地址

  • 通用地址结构——sockaddr
    struct sockaddr {
        unsigned short sa_family;  // 地址家族
        char sa_data;              // 协议地址
    };
    
  • INET协议族地址结构——sockaddr_in
    struct sockaddr_in { 
        short sin_family;            //地址家族 
        u_short sin_port;            //端口号 
        struct in_addr sin_addr;     //IP 地址 
        unsigned char sin_zero[8];   //Unused 
    };
    
    其中,IPv4地址结构in_addr:
    
    struct in_addr {
        unsigned long s_addr;
    };
    

上述地址之间的关系如下所述:
在这里插入图片描述

4. socket及其地址的通俗解释

刚学习的时候可能会疑惑,为什么socket需要有地址?socket地址到底是什么?
socket可以理解为一个手机或者电话,仔细看socket地址的内容是IP和端口,也就是电话的号码(IP)与分机号(端口号)

  • 当往外打电话时,我们只需要知道对方的电话号码和分机号即可;所以socket如果只用来发送数据,无需手动绑定socket地址,操作系统会帮忙做。
  • 如果一部电话是用来接电话的,这部电话是必须先绑定好自己的电话号码和分机号;也就是说socket必须bind自己的socket地址。

5. 使用socket编程

socket相关的理论就先介绍到这里,在掌握了socket这个法宝之后就可以开始编程实现UDP或TCP通信了。
Linux网络编程06——UDP协议编程:https://blog.youkuaiyun.com/lianghe_work/article/details/45170699
Linux网络编程09——TCP编程之客户端:
https://blog.youkuaiyun.com/lianghe_work/article/details/46411927
Linux网络编程–tcp服务器:
https://blog.youkuaiyun.com/lianghe_work/article/details/46468001

6. 参考

  1. http://www.jiaochengku.net/ITjiaocheng/wangluobiancheng/41947.html
  2. http://homepage.smc.edu/morgan_david/cs70/sockets.htm
基于微信小程序的答题系统 学习视频:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!5812)]《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 阅读详情

相关推荐

陀螺仪与加速度计的姿态融合——互补滤波

本篇文章我们来讲讲如何将陀螺仪和加速度计的数据结合起来,获取更准确的姿态数据,使用的是互补滤波的方法。

小白白学电子 2万+

Java解析网络数据流的三种方法

Java作为最开放的语言,已越来越受到网络程序员的青睐。但这一青睐族有着同样的经历——曾经都为网络上通信的Java数据格式而烦脑。 UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需

xiongyizhou的博客 6710

新手如何结合pbootCMS和宝塔面板快速构建网站

摘要: 新手可通过pbootCMS(轻量CMS)和宝塔面板(可视化工具)快速搭建网站,无需命令行。步骤包括:1) 准备服务器(Linux/CentOS7.x)和域名;2) 安装宝塔面板并配置LNMP环境(PHP7.4+MySQL5.7);3) 创建网站目录,上传并解压pbootCMS源码,设置文件权限;4) 运行安装向导,填写数据库信息和管理员账号;5) 测试前台/后台功能,优化性能并绑定域名。全程约30-60分钟,宝塔简化运维,pbootCMS便于内容管理,适合零基础用户。注意定期更新和备份以保障安全。

qinzhenyan的博客 1641

基于Socket实现网络编程

Socket是网络上两个程序间双向通讯的一端,它既可以发送请求,也可以接收请求,利用它可以方便的编写网络上数据的传递,在java中,有专门的类类处理用户的请求和响应。利用Socket 类的方法,就可以实现两台计算机之间的通信,那么怎么利用socket进行网络编程呢?我试试水~ 网络中的进程之间是如何进行通信的? 本地进程间通信(IPC)有很多种方法,简而言之可以归结为以下四类: 消息传递(管道,FIFO,消息队列); 同步(互斥量,条件变量,读写锁,文件和写记录锁,信号量); 内存共享(匿名的和具体的,线

m0_67393827的博客 440

哨兵一号数据下载

哨兵1号数据的下载过程

weixin_59617499的博客 5135

Revit二次开发——不启动Revit,做rvt文件数据导出

Revit二次开发——不启动Revit,做rvt文件数据导出Node.js部分调用C#端供外部调用的dllC#部分调用RevitNet.dll,做数据导出exe做外部调用dll总结功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 N

Y.Jerome的专栏 4111

谈一谈网络编程学习经验(06-08更新)

谈一谈网络编程学习经验 陈硕 giantchen@gmail.com blog.youkuaiyun.com/Solstice 2011-06-06 PDF 版下载:https://github.com/downloads/chenshuo/documents/LearningNetworkProgramming.pdf本文谈一谈我在学习网络编程方面的一些个人经验。“网络编程”这个术语

陈硕的Blog 14万+

DRAM架构演进与HBM技术在高性能计算中的应用

DRAM(动态随机存取存储器)是现代计算系统中关键的内存技术,其架构优化直接影响数据供给能力。随着AI训练和科学计算等数据密集型负载的普及,传统DDR架构面临带宽墙、能效比和访问粒度等挑战。HBM(高带宽内存)通过3D堆叠技术(如TSV硅通孔)和异构集成(如PIM存内计算)显著提升了带宽和能效比。这些技术在高性能计算、AI推理和大模型训练等场景中展现出巨大潜力,例如HBM3的带宽可达819GB/s,能效比低至0.95pJ/b。未来,DRAM技术将继续向更高密度、更低功耗和更智能的内存计算方向发展。

weixin_35757191的博客 400

Linux网络编程——socket 通信基础

socket 本身有“ 插座 ”的意思,在 Linux 环境下,用于表示 进程间网络通信 的 特殊文件类型。本质为 内核 借助 缓冲区 形成的 伪文件。既然是文件,那么理所当然的,我们可以使用 文件描述符 引用套接字。与管道类似的,Linux 系统将其封装成文件的目的是为了 统一接口,使得 读写套接字 和 读写文件 的操作一致。区别是 管道 主要应用于 本地进程间通信,而 套接字 多应用于 网络进程间数据的传递。

weixin_43412762的博客 3473

手把手教你学Simulink--基于火电发电系统的场景实例:燃煤发电机组的锅炉-汽轮机协调控制仿真

本文介绍了使用Simulink构建燃煤发电机组锅炉-汽轮机协调控制系统的仿真方法。系统包含锅炉子系统、汽轮机子系统和协调控制器三大模块,通过传递函数建模和PID控制策略实现协调控制。详细说明了从模型创建、子系统设置到控制器设计的完整流程,包括燃料供给、汽轮机模型和数据处理等关键环节。最后通过性能评估验证系统响应速度、参数稳定性和效率等指标。该仿真方法为火电系统控制策略设计和优化提供了有效工具。

MHD0815的博客 1153

【异常】OpenClaw 连接异常This site can‘t be reached 127.0.0.1 refused to connect Try: Checking the proxy

在访问OpenClaw相关服务时,浏览器提示如下异常信息,无法正常加载页面:Try:补充说明:该报错仅出现于本地访问场景(127.0.0.1为本地回环地址),涉及OpenClaw核心服务的本地连接交互,无外部网络及敏感信息泄露风险。

奶爸的编程之路,也就一周冷个三天 1484

Linux:Socket网络编程

• 校验和• 序列号(按序到达)• 确认应答• 超时重发• 连接管理• 流量控制• 拥塞控制提高性能。

MaoRuofeng的博客 1203

【SpringBoot 4.x 第70节】夯爆了,企业级 API 设计规范落地:状态码、错误码、接口文档与兼容性(超详解)!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 131

深入解析网络编程:Socket基础与操作详解

这是因为在网络传输中,需要保证数据的一致性。因此,当数据在网络中传输时,必须按照大端序排列。为了确保数据在网络中正确传输,需要将主机字节顺序(Host Byte Order)转换为网络字节顺序。我们通常使用的有两种数据类型:短型(两个字节)和长型(四个字节)。

无敌岩雀的博客 3590

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

基于JAVA的网络编程——socket文件传输

基于JAVA的网络编程——socket文件传输 文章目录基于JAVA的网络编程——socket文件传输效果图步骤文件结构实现代码 效果图 步骤 客户端实现步骤: 1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源 2.创建一个客户端Socket对象 ,构造方法中绑定服务器的IP地址和端口号 3.使用Socket中的方法getOutputStream,获取网络字节输出流0utputStream对象 4.使用本地字节输入流FileInputstream对象中的方法rea

Gowi的博客 1956

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Chapter 40 Socket网络编程

在现代计算机网络中,Socket(套接字)是实现进程之间通信的重要工具。在网络应用中,Socket 充当了进程间数据传输的搬运工,负责进程之间的网络数据传输。无论是服务器还是客户端,二者通过 Socket 进行通信,形成了网络应用的基础。本章详细讲解了Socket服务端开发以及Socket客户端开发。

2302_80253507的博客 1415

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python03 - 网络编程

python03 - 网络编程

qq_43350524的博客 1023

科普文:Java基础系列之【Socket网络编程】

Socket(中文:套接字)编程是网络常用的编程,我们通过在网络中创建Socket关键字来实现网络间的通信;要想解释清楚Socket,首先要知道TCP,要想知道TCP,那就得对TCP/IP的体系结构以及每一层的大概工作有所了解,那么我们就先来说说TCP/IP的分层。链路层:对0和1进行分组,定义数据帧,确认主机的物理地址,传输数据;网络层:定义IP地址,确认主机所在的网络位置,并通过IP进行MAC寻址,对外网数据包进行路由转发;

为无为,事无事,味无味。 2207

JAVA.SE Socket网络编程

文章目录1.网络编程入门1.1软件架构介绍1.2互联网通信协议1.3网络编程的三要素2.TCP通信2.1通信分为客户端与服务器2.2 socket的介绍与使用 1.网络编程入门 1.1软件架构介绍 c/s架构:客户端服务器模型,qq b/s架构:浏览器服务器模型,网页版qq,网页版淘宝 1.2互联网通信协议 网络通信,互联网/局域网 通信:数据传输 协议:规范 TCP/IP协议 TCP传输控制协议...

qq_41125149的博客 691

Linux网络编程-Socket编程

好好学习,天天向上 1667

Linux 网络编程基础:从 TCP/UDP 到 Socket 编程

地址转换工具inet_aton(字符串 IP→网络字节序)和inet_ntoa(网络字节序→字符串 IP)简化 IP 处理。协议选择:需可靠性选 TCP,需实时性选 UDP;UDP 需自行处理丢包和重传。错误处理:所有 Socket 函数需检查返回值,处理errno错误码(如EAGAIN表示资源暂时不可用)。Linux 网络编程的核心是理解 TCP/UDP 的差异、合理使用端口号、处理字节序转换,并掌握 Socket 编程的基本流程。

HJACNP的博客 1947

【Linux网络编程】socket基础

🔥个人主页Quitecoder🔥linux笔记仓。

Quietcoder的博客 1019

socket 网络编程

前言 进程间的通信有:管道、消息队列、共享内存、信号、信号量。特点:依赖内核,无法进行多机通信。 网络编程:

weixin_51685146的博客 381

超基础的网络编程03:基于UDP的Socket通信

网络编程03:基于UDP的Socket通信标签: 网络编程网络编程03基于UDP的Socket通信 UDP编程 DatagramPacket 构造方法 常用方法 DatagramSocket 构造方法 常用方法 基于UDP的socket通信模型 例子 发送和接收 UDP登录和相应 UDP编程UDP协议(用户数据报协议)是无连接、不可靠的、无序的。UDP协议以数据报作为数据传输的载体。进行数据传输时,

japson的专栏 477

【JavaEE初阶】网络编程基础与Socket套接字

网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。​当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程特殊的情况,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。但是,我们一定要明确,我们的目的是提供网络上不同主机,基于网络来传输数据资源:进程A:编程来获取网络资源进程B:编程来提供网络资源​。

2301_81510374的博客 1215
上一篇: 网络编程入门教程02——IP和TCP/UDP
下一篇: 如何便捷获取枚举类型的最大值?
隋边边
博客等级 码龄11年 304粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值