STM32高级 以太网通讯案例2:搭建TCP服务端

需求描述

在TCP通讯的时候,客户端必须主动联系服务器,这样才能实现通讯。服务器与客户端之间的连接是一种长连接,一旦连上一般是不会断开的

在STM32上启动一个TCP的服务端,在电脑上用TCP客户端去连接服务端。客户端给服务端发送数据后,服务端再原封不动的返回给客户端。

思路

名词

Client:客户端----发起连接请求

Server:服务器----要连接的节点

CS架构(拥有客户端和服务器的):网络游戏,下载客户端,核心数据去请求服务器

BS架构(不用客户端直接直接是浏览器):网页游戏,客户端资源同样请求服务器下载到网页,核心数据去请求服务器。

socket: 利用操作系统提供的port(端口)和IP地址,实现网络中不同计算机间的数据交换

RAW:生的

config:配置

listen:听

established:确定的

closed:关闭

第一步逻辑:

stm32作为服务器,w5500作为网卡与作为客户端的电脑进行连接。电脑启动一个客户端发送一个连接请求,连上之后,主动给服务器发一个数据,然后服务器收到数据,返回相应的数据。

TCP连接需要通过端口进行连接。

第二步查看W5500寄存器:

Socket端口寄存器
MR:模式寄存器

ND:no delay ACK 无延时应答

P3~P0:协议TCP配置0001

CR:配置寄存器

OPEN:打开:如果是TCP----SR-SOCKINIT(0x13)

LISTEN:只在TCP服务端配置,连接请求成功后,LISTEN变为ESTABLIESHE,连接失败:LISTEN变为CLOSED

CONNECT:作为客户端是使用

DISCON:执行四次挥手断开操作。0x08

CLOSE:关闭socket,强行关闭0x10

SEND:发送缓冲区发送当前缓冲区的所有数据

SEND_KEEP:心跳包证明还在连接。

RECV:将接收缓冲区的数据提取出来。

IR:中断寄存器

许多中断标志位

PORT:源端口寄存器

配置本地的端口号

DHAR:目标MAC地址寄存器
DIPR:目标IP地址寄存器
DPORT:目标端口寄存器
IMR:中断屏蔽寄存器
RSR:空闲接收缓存寄存器
SR:状态寄存器

CLOSED:0x00关闭状态

INIT:初始化状态

LISTEN:监听状态

ESTABLISHED:建立连接状态

CLOSE_WAIT:半关闭状态

第三步服务器状态流程图

涉及函数

启动TCP服务器

//1 获取当前的状态get

getSn_SR:获取SR状态寄存器的数据

// 2. 判断当前状态,执行相应操作,进入下一个状态

// 2.1 如果是关闭状态,就打开socket

(socket.c)socket:打开socket

//2.2 如果是INIT状态,就执行监听,启动服务端

listen:监听函数

//2.3 如果是半关闭状态,就直接关闭socket

(socket.c)close:关闭函数

接收数据:

// 根据事件标志位,判断是否接收到数据;如果接收到,就读取到缓冲区

getSn_IR:提取标志位IR寄存器

//清零标志位(写1清0)

setSn_IR:

//读取数据长度

//读取数据

(socket.c)recv:

发送数据

// 1. 获取socket状态

getSn_SR:

// 2. 判断如果是建立连接状态,就接收数据

(socket.c)send:

主函数中:记得数据长度清0。

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

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

相关文章

系统架构师考试 常错题记录 01

1.按照《中华人民共和国著作权法》的权利保护期( )受到永久保护。 A.发表权 B.修改权 C.复制权 D.发行权 正确答案:B 解析:本题考查知识产权法中的《中华人民共和著作权法》保护期限知识点。 《中华人民共和著作权法》中约定署名权…

WebPack3项目升级webpack5的配置调试记录

文章目录 前言一、webpack3环境1.1、知识点记录1.1.1、配置解释1.1.2、webpack与sass版本对应关系1.1.3、CommonJS与ESModule1.1.4、node版本管理nvm1.1.5、sass-loader、sass与node-sass 1.2、其他1.2.1、.d.ts是什么文件1.2.2、react与types/react版本对应关系1.2.3、webpack…

[源码解析] 模型并行分布式训练Megatron (2) --- 整体架构

link [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 目录 [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 0x00 摘要0x01 启动 1.1 分布式启动1.2 构造基础 1.2.1 获取模型1.2.2 获取数据集1.2.3 步进函数 1.2.3.1 广播数据0x02 Pretrain0x03 初始化 3.1 …

事件驱动编程与异步编程:原理、对比及实践案例

在编程领域,事件驱动编程(Event-Driven Programming)与异步编程(Asynchronous Programming)是两种极为关键的编程范式,它们对于提升程序运行效率与响应速度效果显著,尤其在应对I/O密集型任务以及…

基于earthSDK三维地图组件开发

上效果 功能点 测量分析相机位置切换geojson数据加载地图打点&#xff0c;显示信息点击回传数据二三位切换 这里二三维切换通上篇openlayers分享&#xff0c;技术交流V:bloxed <template><div class"h100 w100"><div style"width:100%; heig…

计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店价格预测系统 酒店可视化 酒店爬虫 酒店大数据 neo4j知识图谱 深度学习 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

RK3506开发板:智能硬件领域的新选择,带来卓越性能与低功耗

在现代智能硬件开发中&#xff0c;选择一款性能稳定、功耗低的开发板是确保产品成功的关键。Rockchip最新推出的RK3506芯片&#xff0c;凭借其卓越的能效比、多功能扩展性和优秀的实时性能&#xff0c;已经成为智能家电、工业控制、手持终端等领域的热门选择。而基于RK3506的Ar…

【AIGC-ChatGPT进阶副业提示词】星际占卜师:探索星象能量的艺术【限时免费阅读,一天之后自动进入进阶课程】

引言 在这个数字化的时代&#xff0c;我们创造了一个独特的角色 —— 星际占卜师。这不仅是一个简单的运势预测工具&#xff0c;更是一个融合了玄学、预言和能量解读的智能向导。通过精心设计的系统提示词和独特的画境生成机制&#xff0c;星际占卜师能够为用户带来沉浸式的占…

机器学习之PCA降维

主成分分析&#xff08;PCA&#xff0c;Principal Component Analysis&#xff09; 主成分分析&#xff08;PCA&#xff09;是一种常见的无监督学习技术&#xff0c;广泛应用于数据降维、数据可视化以及特征提取等任务。PCA的目标是通过线性变换将数据从高维空间映射到低维空间…

SOTA简繁中文拼写检查工具:FASPell Chinese Spell Checker 论文

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

Visual Studio Code历史版本下载

本章教程&#xff0c;介绍如何找到Visual Studio Code的历史版本官方下载地址。 一、历史版本下载地址 下载地址&#xff1a;https://code.visualstudio.com/updates/ 二、常用版本下载地址 August 2017 (version 1.16)&#xff1a;https://code.visualstudio.com/updates/v1_…

Kubernetes(k8s)离线部署DolphinScheduler3.2.2

1.环境准备 1.1 集群规划 本次安装环境为&#xff1a;3台k8s现有的postgreSql数据库zookeeper服务 1.2 下载及介绍 DolphinScheduler-3.2.2官网&#xff1a;https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2 官网安装文档&#xff1a;https://dolphinscheduler.apach…

【自动化测试】windows下安装Selenium浏览器界面测试工具

Date: 2024.12.23 10:15:53 author: lijianzhan 简述&#xff1a;这篇教程详细介绍了如何在Windows环境下安装selenium&#xff0c;并设置Chrome浏览器驱动。什么是Selenium&#xff1f;Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端…

如何在 Ubuntu 22.04 上安装 phpMyAdmin

简介 PHPMyAdmin 是在 Ubuntu 22.04 上管理 MySQL 数据库的绝佳选择。它是一个流行的工具&#xff0c;拥有简单、高效且用户友好的基于 Web 的界面&#xff0c;让你能够轻松地管理 MySQL 数据库。因此&#xff0c;许多开发人员、数据库管理员和网站所有者都信任 PHPMyAdmin 来…

大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

[Python3] Sanic中间件

在 Sanic 中&#xff0c;中间件&#xff08;middleware&#xff09;是指在请求和响应之间执行的代码。它们是一个非常强大的工具&#xff0c;用于处理请求的预处理、响应的后处理、全局错误处理、日志记录、认证、权限校验、跨域资源共享&#xff08;CORS&#xff09;等任务。中…

使用 OpenCV 绘制线条和矩形

OpenCV 是一个功能强大的计算机视觉库&#xff0c;它不仅提供了丰富的图像处理功能&#xff0c;还支持图像的绘制。绘制简单的几何图形&#xff08;如线条和矩形&#xff09;是 OpenCV 中常见的操作。在本篇文章中&#xff0c;我们将介绍如何使用 OpenCV 在图像上绘制线条和矩形…

操作系统课程设计

摘 要 本项目旨在深入设计与实现一套基于Java的模拟操作系统&#xff0c;模拟和实现常见操作系统的核心功能&#xff0c;包括进程管理、内存分配与调度、高效的文件系统和多样化设备的管理。通过该模拟操作系统的开发&#xff0c;探索计算机操作系统的基础理论与实际工程细节…

css改变输入右下角图标

前言 正常情况下&#xff0c;HTML textarea 多行文本输入框会存如下图所示图标&#xff0c; 用户可拉动它改变高度&#xff0c;这是我们不想看到的&#xff0c;所以要去掉它。 去掉后&#xff1a; 解决方案 设置 resize 属性即可&#xff0c;如下代码所示&#xff1a; <…

HTML-CSS(day01)

W3C标准&#xff1a; W3C&#xff08; World Wide Web Consortium&#xff0c;万维网联盟&#xff09; W3C是万维网联盟&#xff0c;这个组成是用来定义标准的。他们规定了一个网页是由三部分组成&#xff0c;分别是&#xff1a; 三个组成部分&#xff1a;&#xff08;1&…