自学内容网 自学内容网

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。


原文地址:https://blog.csdn.net/qq_64219867/article/details/144727282

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!