当前位置: 首页 > news >正文

5.5 W5500 TCP服务端与客户端

文章目录

  • 1、TCP介绍
  • 2、W5500简介
    • 2.1 关键函数
      • socket
      • listen
      • send
      • getSn_RX_RSR
      • recv
      • 自动心跳包检测
      • getSn_SR

1、TCP介绍

TCP 服务端:

  1. 创建套接字[socket]:服务器首先创建一个套接字,这是网络通信的端点。
  2. 绑定套接字[bind]:服务器将套接字绑定到一个网络接口上,通常是本地IP地址,并指定一个端口号,客户端将通过这个端口来连接服务器。
  3. 监听套接字[listen]:服务器开始监听来自客户端的连接请求。
  4. 接受连接[accept]:当服务器监听到客户端的连接请求时,它将接受这个连接,并创建一个新的套接字来处理与该客户端的通信。服务器可以同时接受多个客户端的连接。
  5. 发送和接收数据[send/recv]:服务器通过这个新的套接字与客户端进行数据交换。 6. 关闭连接:数据交换完成后,服务器可以关闭与客户端的连接。

TCP客户端:

  1. 创建套接字[socket]:客户端创建一个套接字。
  2. 连接到服务器[connet]:客户端连接到服务器的IP地址和端口。
  3. 发送和接收数据[send/recv]:一旦连接建立,客户端就可以通过套接字发送请求并接收服务器的响应。
  4. 关闭连接:数据交换完成后,客户端可以关闭套接字,结束与服务器的通信。

在这里插入图片描述

2、W5500简介

特点:
支持硬件 TCP/IP 协议:TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE
支持 8 个独立端口(Socket)同时通讯
支持掉电模式,支持网络唤醒
支持高速串行外设接口(SPI 模式 0,3)
内部 32K 字节收发缓存
内嵌 10BaseT/100BaseTX 以太网物理层(PHY)
支持自动协商(10/100-Based 全双工/半双工)
不支持 IP 分片

2.1 关键函数

socket

功能:socket如果处于关闭状态,则用于创建套接字[socket]、绑定套接字[bind]。

/**
*@brief   This Socket function initialize the channel in perticular mode, and set the port and wait for W5200 done it.
*@param		s: socket number.
*@param		protocol: The socket to chose.
*@param		port:The port to bind.
*@param		flag: Set some bit of MR,such as **< No Delayed Ack(TCP) flag.
*@return  1 for sucess else 0.
*/
uint8 socket(SOCKET s, uint8 protocol, uint16 port, uint8 flag)

描述:按照传递的参数初始化并打开socket s
参数:s socket号(0-7)
参数:protocol 指定要运行的协议类型(Sn_MR_XXX)

参数:port 绑定的端口号,如果为0则自动分配
参数:flag socket flags,见SF_XXXXXXX

返回:s 如果成功
SOCKERR_SOCKNUM 如果socket号无效
SOCKERR_SOCKMODE 不支持的socket模式
SOCKERR_SOCKFLAG 无效的socket flags.

listen

功能:socket开始监听

/**
*@brief   This function established  the connection for the channel in passive (server) mode. This function waits for the request from the peer.
*@param		s: socket number.
*@return  1 for success else 0.
*/
uint8 listen(SOCKET s)

send

功能:在socket上的tcp链接成功建立后,可以调用send函数来发送数据。

/**
*@brief   This function used to send the data in TCP mode
*@param		s: socket number.
*@param		buf: data buffer to send.
*@param		len: data length.
*@return  1 for success else 0.
*/
uint16 send(SOCKET s, const uint8 * buf, uint16 len)

getSn_RX_RSR

功能:几号sockedt 接收到数据长度。

/**
*@brief		This fuction is to give size of received data in receive buffer.
*@param		s: socket number
*@return  socket TX free buf size
*/
uint16 getSn_RX_RSR(SOCKET s)

recv

功能: 接收TCP socket上连接的对象发来的数据

/**
*@brief		This function is an application I/F function which is used to receive the data in TCP mode.It continues to wait for data as much as the application wants to receive.
*@param		s: socket number.
*@param		buf: data buffer to receive.
*@param		len: data length.
*@return  received data size for success else 0.
*/
uint16 recv(SOCKET s, uint8 * buf, uint16 len)

自动心跳包检测

个人使用send_Ka函数如下,手动每隔3S自动发送心跳包。

void  send_Ka(SOCKET s)
{IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND_KEEP);return;
}void setKeepAlive(SOCKET s,uint8_t timeout)
{IINCHIP_WRITE(Sn_KPALVTR(s),timeout);}

getSn_SR

读取Socket sn状态机

/**
*@brief 	This function is to get socket status
*@param		s: socket number
*@return  socket status/* Sn_SR values */
*#define SOCK_CLOSED                  0x00     /**< closed */
*#define SOCK_INIT                    0x13     /**< init state */
*#define SOCK_LISTEN                  0x14     /**< listen state */
*#define SOCK_SYNSENT                 0x15     /**< connection state */
*#define SOCK_SYNRECV                 0x16     /**< connection state */
*#define SOCK_ESTABLISHED             0x17     /**< success to connect */
*#define SOCK_FIN_WAIT                0x18     /**< closing state */
*#define SOCK_CLOSING                 0x1A     /**< closing state */
*#define SOCK_TIME_WAIT               0x1B     /**< closing state */
*#define SOCK_CLOSE_WAIT              0x1C     /**< closing state */
*#define SOCK_LAST_ACK                0x1D     /**< closing state */
*#define SOCK_UDP                     0x22     /**< udp socket */
*#define SOCK_IPRAW                   0x32     /**< ip raw mode socket */
*#define SOCK_MACRAW                  0x42     /**< mac raw mode socket */
*#define SOCK_PPPOE                   0x5F     /**< pppoe socket */
*/
uint8 getSn_SR(SOCKET s)
{return IINCHIP_READ(Sn_SR(s));
}
状态描述
SOCK_CLOSEDsocket处于关闭状态,资源被释放。disconnect或close命令生效后,或者超时后,无视之前状态变为这个状态此时无法通信
SOCK_INITsocket以TCP模式打开,然后才可以调用connect或listen。通过正确地调用socket函数以转变为这个状态
SOCK_LISTENsocket正以TCP服务器模式运作,并正在等待(监听)连接请求
SOCK_SYNSENTsocket发送了一个连接请求包(SYN包),这是从SOCK_INIT使用connect命令后的中间状态,如果随后收到了“接受连接”(SYN/ACK包),则会转为SOCK_ESTABLISHED;否则在超时后会转为SOCK_CLOSED,同时会设置超时中断标志位
SOCK_SYNRECVsocket接收到了“请求连接”(SYN包),如果随后发送答复(SYN/ACK包)成功,则会转为SOCK_ESTABLISHED;否则在超时后会转为SOCK_CLOSED,同时会设置超时中断标志位
SOCK_ESTABLISHEDsocket tcp连接已建立,即在SOCK_LISTEN状态下收到了tcp客户端发来的SYN包并答复成功,或使用connect命令成功后会转变为的状态。
SOCK_FIN_WAIT SOCK_CLOSING SOCK_TIME_WAIT表明socket正在关闭。它们是tcp链接主动或被动关闭的中间状态
SOCK_CLOSE_WAIT表明socket正在关闭。这个状态说明socket收到了tcp链接的另一方发来的“断连请求”(FIN包)。这是半关闭状态,可以继续发送数据。发送完后应该调用disconnect或者close来完全关闭。
SOCK_LAST_ACK表明socket正在被动关闭状态下。这个状态说明socket正在等待对“断连请求”(FIN包)的答复(FIN/ACK包)。当成功收到答复或者超时后会变为SOCK_CLOSED状态。
SOCK_UDPsocket正以UDP模式运作。通过正确地调用socket函数以转变为这个状态
SOCK_IPRAWIP raw模式。本文不涉及这方面内容。
SOCK_MACRAWMACRAW模式。本文不涉及这方面内容。

相关文章:

5.5 W5500 TCP服务端与客户端

文章目录 1、TCP介绍2、W5500简介2.1 关键函数socketlistensendgetSn_RX_RSRrecv自动心跳包检测getSn_SR 1、TCP介绍 TCP 服务端&#xff1a; 创建套接字[socket]&#xff1a;服务器首先创建一个套接字&#xff0c;这是网络通信的端点。绑定套接字[bind]&#xff1a;服务器将…...

一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测

一区北方苍鹰算法优化创新改进Transformer&#xff01;NGO-Transformer-LSTM多变量回归预测 目录 一区北方苍鹰算法优化创新改进Transformer&#xff01;NGO-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab NGO-Transformer-LST…...

深入理解 MyBatis 的缓存机制:一级缓存与二级缓存

MyBatis 是目前 Java 开发中常用的一种 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它不仅简化了 SQL 语句的编写和管理&#xff0c;还提供了强大的缓存机制&#xff0c;用以提高数据库访问的性能。MyBatis 的缓存分为一级缓存和二级缓存&#xff0c;分别应用于不…...

移远通信推出全新5G RedCap模组RG255AA系列,以更高性价比加速5G轻量化大规模商用

11月20&#xff0c;全球领先的物联网整体解决方案供应商移远通信宣布&#xff0c;正式推出其全新5G RedCap模组RG255AA系列。该系列模组支持5G NR独立组网&#xff08;SA&#xff09;和LTE Cat 4双模通信&#xff0c;具有高性能高集成度、低功耗、小尺寸、高性价比等优势&#…...

架构-微服务-环境搭建

文章目录 前言一、案例准备1. 技术选型2. 模块设计3. 微服务调用 二、创建父工程三、创建基础模块四、创建用户微服务五、创建商品微服务六、创建订单微服务 前言 ‌微服务环境搭建‌ 使用的电商项目中的商品、订单、用户为案例进行讲解。 一、案例准备 1. 技术选型 maven&a…...

conda下载与pip下载的区别

一、conda下载与pip下载的区别 最重要是依赖关系&#xff1a; pip安装包时&#xff0c;尽管也对当前包的依赖做检查&#xff0c;但是并不保证当前环境的所有包的所有依赖关系都同时满足。 当某个环境所安装的包越来越多&#xff0c;产生冲突的可能性就越来越大。conda会检查当…...

MySQL获取数据库内所有表格数据总数

在 MySQL 中&#xff0c;要获取数据库内所有表格的数据总数&#xff0c;可以编写一个查询脚本来遍历每个表并计算其行数。你可以使用 INFORMATION_SCHEMA 数据库&#xff0c;它包含了关于数据库元数据的表格&#xff0c;如 TABLES 和 COLUMNS。 以下是一个示例脚本&#xff0c…...

Matlab 深度学习工具箱 案例学习与测试————求二阶微分方程

clc clear% 定义输入变量 x linspace(0,2,10000);% 定义网络的层参数 inputSize 1; layers [featureInputLayer(inputSize,Normalization"none")fullyConnectedLayer(10)sigmoidLayerfullyConnectedLayer(1)sigmoidLayer]; % 创建网络 net dlnetwork(layers);% 训…...

django authentication 登录注册

文章目录 前言一、django配置二、后端实现1.新建app2.编写view3.配置路由 三、前端编写1、index.html2、register.html3、 login.html 总结 前言 之前&#xff0c;写了django制作简易登录系统&#xff0c;这次利用django内置的authentication功能实现注册、登录 提示&#xff…...

三种蓝牙架构实现方案

一、蓝牙架构方案 1、hostcontroller双芯片标准架构 手机里面包含很多SoC或者模块&#xff0c;每颗SoC或者模块都有自己独有的功能&#xff0c;比如手机应用跑在AP芯片上&#xff0c;显示屏&#xff0c;3G/4G通信&#xff0c;WiFi/蓝牙等都有自己专门的SoC或者模块&#xff0…...

ffmpeg 视频滤镜:高斯模糊-gblur

滤镜描述 gblur 官网地址 > FFmpeg Filters Documentation 这个滤镜会将视频变得模糊。 滤镜使用 参数 gblur AVOptions:sigma <float> ..FV.....T. set sigma (from 0 to 1024) (default 0.5)steps <int> ..FV.....T…...

期权懂|在期权市场中,如何用好双买期权?

期权小懂每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 在期权市场中&#xff0c;如何用好双买期权&#xff1f; 期权双买操作&#xff0c;即同时买入认购期权&#xff08;看涨期权&#xff09;和认沽期权&#xff08;看跌期权&#xf…...

【Linux学习】【Ubuntu入门】2-3 make工具和makefile引入

1.使用命令新建三个.c文件vi main.c&#xff0c;vi input.c&#xff0c;vi caclcu.c&#xff0c;两个.h文件vi input.h&#xff0c;vi caclcu.h 2.vi Makefile&#xff1a;新建Makefile文件&#xff0c;输入一下内容 注意&#xff1a;命令列表中每条命令前用TAB键&#xff0c;不…...

《黑神话:悟空》游戏辅助修改器工具下载指南与操作方法详解

《黑神话&#xff1a;悟空》是一款备受期待的动作冒险游戏&#xff0c;目前尚未正式发布。游戏开发团队一直在强调游戏的完整性和公平性&#xff0c;因此官方并不支持任何形式的作弊或修改行为。然而&#xff0c;对于一些玩家而言&#xff0c;使用辅助修改器可能会成为他们体验…...

C语言菜鸟入门·关键字·union的用法

目录 1. 简介 2. 访问成员 2.1 声明 2.2 赋值 3. 共用体的大小 4. 与typedef联合使用 5. 更多关键字 1. 简介 共用体&#xff08;union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同的数据类型&#xff0c;但每次只能存储其中一种类型的…...

ensp静态路由实验

一、实验目的 1、熟练掌握交换机的基本配置命令 2、熟练掌握静态路由的使用方法 3. 熟练掌握交换机端口模式 二、实验内容 需求&#xff1a; 根据要求利用现有实验设备组建小型局域网 实验设备&#xff1a; 交换机S37002台&#xff1b;PC机2台&#xff1b;路由器2台。 …...

构建 Java Web 应用程序:从 Servlet 到数据库交互(Eclipse使用JDBC连接Mysql数据库)

第 1 部分&#xff1a;环境设置 安装 Java Development Kit (JDK)&#xff1a;下载并安装 JDK。设置 IDE&#xff1a;安装并配置 IDE&#xff08;如 IntelliJ IDEA 或 Eclipse&#xff09;。安装数据库&#xff1a;下载并安装 MySQL 数据库。配置数据库&#xff1a;创建数据库…...

mfc100u.dll是什么?分享几种mfc100u.dll丢失的解决方法

mfc100u.dll 是一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;属于 Microsoft Foundation Classes (MFC) 库的一部分。MFC 是微软公司开发的一套用于快速开发 Windows 应用程序的 C 类库。mfc100u.dll 文件包含了 MFC 库中一些常用的函数和类的定义&#xff0c;这…...

Java面试之多线程并发篇

前言 本来想着给自己放松一下&#xff0c;刷刷博客&#xff0c;突然被几道面试题难倒&#xff01;说一说自己对于 synchronized 关键字的了解&#xff1f;说说自己是怎么使用 synchronized 关键字&#xff1f;什么是线程安全&#xff1f;Vector是一个线程安全类吗&#xff1f;…...

视频推拉流EasyDSS互联网直播点播平台技术特点及应用场景剖析

在数字科技日新月异的今天&#xff0c;视频直播和点播已经成为互联网内容传播的重要方式之一。而互联网直播点播平台EasyDSS作为功能强大的流媒体直播点播视频能力平台&#xff0c;提供了一站式的视频推拉流、转码、直播、点播、时移回放、存储等视频服务&#xff0c;广泛应用于…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...