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模式。本文不涉及这方面内容。

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

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

相关文章

超高流量多级缓存架构设计!

文章内容已经收录在《面试进阶之路》&#xff0c;从原理出发&#xff0c;直击面试难点&#xff0c;实现更高维度的降维打击&#xff01; 文章目录 电商-多级缓存架构设计多级缓存架构介绍多级缓存请求流程负载均衡算法的选择轮询负载均衡一致性哈希负载均衡算法选择 应用层 Ngi…

信创改造 - TongRDS 替换 Redis

记得开放 6379 端口哦 1&#xff09;首先在服务器上安装好 TongRDS 2&#xff09;替换 redis 的 host&#xff0c;post&#xff0c;passwd 3&#xff09;TongRDS 兼容 jedis # 例如&#xff1a;更改原先 redis 中对应的 host&#xff0c;post&#xff0c;passwd 改成 TongRDS…

vue3 uniapp 扫普通链接或二维码打开小程序并获取携带参数

vue3 uniapp 扫普通链接或二维码打开小程序并获取携带参数 微信公众平台添加配置 微信公众平台 > 开发管理 > 开发设置 > 扫普通链接二维码打开小程序 配置链接规则需要下载校验文档给后端存入服务器中&#xff0c;保存配置的时候会校验一次&#xff0c;确定当前的配…

Git(一)基本使用

目录 一、使用git -v 查看安装git版本 二、使用mkdir 创建一个文件&#xff0c;并使用 git init 在该目录下创建一个本地仓库&#xff0c; 三、通过git clone命令接入线上仓库 四、使用git status查看仓库状态信息 五、利用echo写入一个文件 并使用cat进行查看 【Linux】e…

QML学习 —— 29、3种不同使用动画的方式(附源码)

效果 说明 第一种:属性动画 - 当启动软件时候自动执行动画。      第二种:行为动画 - 当属性发生变化则自动执行动画。      第三种:目标动画 - 将动画变为对象,指定对象的目标进行执行动画。 代码 import QtQuick 2.12 import QtQuick.Window 2.12 import QtQu…

下载并安装Visual Studio 2017过程

一、下载 1、下载链接 下载链接&#xff1a;官方网址 先登录 往下滑找到较早的下载 2、进行搜索下载 或者直接点击&#x1f517;网站跳转 3、确认系统信息进行下载 二、安装 下载完成后右键使用管理员身份运行 1、点击同意后安装 2、若报错—设置失败 打开控制面板-&g…

React(五)——useContecxt/Reducer/useCallback/useRef/React.memo/useMemo

文章目录 项目地址十六、useContecxt十七、useReducer十八、React.memo以及产生的问题18.1组件嵌套的渲染规律18.2 React.memo18.3 引出问题 十九、useCallback和useMemo19.1 useCallback对函数进行缓存19.2 useMemo19.2.1 基本的使用19.2.2 缓存属性数据 19.2.3 对于更新的理解…

vue实现列表滑动下拉加载数据

一、实现效果 二、实现思路 使用滚动事件监听器来检测用户是否滚动到底部&#xff0c;然后加载更多数据 监听滚动事件。检测用户是否滚动到底部。加载更多数据。 三、案例代码 <div class"drawer-content"><div ref"loadMoreTrigger" class&q…

Redis常见面试题总结(上)

Redis 基础 什么是 Redis&#xff1f; Redis &#xff08;REmote DIctionary Server&#xff09;是一个基于 C 语言开发的开源 NoSQL 数据库&#xff08;BSD 许可&#xff09;。与传统数据库不同的是&#xff0c;Redis 的数据是保存在内存中的&#xff08;内存数据库&#xf…

网络协议——BGP(边界网关协议)全网最详解

1. 什么是AS&#xff1f; AS: 指的是在同一个组织管理下&#xff0c;使用统一选路策略的设备集合&#xff0c;AS取值范围四字节&#xff08; 0~43亿&#xff09; 2. BGP概念 BGP是边界网关协议&#xff0c;用于自治系统间的动态协议路径矢量。基于TCP中应用层协议&#xff0c…

【JavaEE】Servlet:表白墙

文章目录 一、前端二、前置知识三、代码1、后端2、前端3、总结 四、存入数据库1、引入 mysql 的依赖&#xff0c;mysql 驱动包2、创建数据库数据表3、调整上述后端代码3.1 封装数据库操作&#xff0c;和数据库建立连接3.2 调整后端代码 一、前端 <!DOCTYPE html> <ht…

调用阿里通义千问大语言模型API-小白新手教程-python

阿里大语言模型通义千问API使用新手教程 最近需要用到大模型&#xff0c;了解到目前国产大模型中&#xff0c;阿里的通义千问有比较详细的SDK文档可进行二次开发,目前通义千问的API文档其实是可以进行精简然后学习的,也就是说&#xff0c;是可以通过简单的API调用在自己网页或者…

《硬件架构的艺术》笔记(七):处理字节顺序

介绍 本章主要介绍字节顺序的的基本规则。&#xff08;感觉偏软件了&#xff0c;不知道为啥那么会放进《硬件架构的艺术》这本书&#xff09;。 定义 字节顺序定义数据在计算机系统中的存储格式&#xff0c;描述存储器中的MSB和LSB的位置。对于数据始终以32位形式保存在存储器…

【STM32】在 STM32 USB 设备库添加新的设备类

说实话&#xff0c;我非常想吐槽 STM32 的 USB device library&#xff0c;总感觉很混乱。 USB Device library architecture 根据架构图&#xff1a; Adding a custom class 如果你想添加新的设备类&#xff0c;必须修改的文件有 usbd_desc.cusbd_conf.cusb_device.c 需要…

C 语言学习-06【指针】

1、目标单元与简介存取 直接访问和间接访问 #include <stdio.h>int main(void) {int a 3, *p;p &a;printf("a %d, *p %d\n", a, *p);*p 10;printf("a %d, *p %d\n", a, *p);printf("Enter a: ");scanf("%d", &a)…

docker镜像、容器、仓库介绍

docker docker介绍docker镜像命令docker容器命令docker仓库 docker介绍 官网 Docker 是一种开源的容器化平台&#xff0c;用于开发、部署和运行应用。它通过将应用程序及其依赖项打包到称为“容器”的单一包中&#xff0c;使得应用能够在任何环境下运行&#xff0c;不受底层系…

《用Python画蔡徐坤:艺术与编程的结合》

简介 大家好&#xff01;今天带来一篇有趣的Python编程项目&#xff0c;用代码画出知名偶像蔡徐坤的形象。这个项目使用了Python的turtle库&#xff0c;通过简单的几何图形和精心设计的代码来展示艺术与编程的结合。 以下是完整的代码和效果介绍&#xff0c;快来试试看吧&…

网络层协议IP

对于网络层我们直接通过IP协议来了解其内容 一.IP协议 首先我们先来了解几个概念&#xff1a; 主机&#xff1a;配有IP地址&#xff0c;但是不进行路由控制的设备 路由器&#xff1a;配有IP地址&#xff0c;同时进行路由控制的设备 节点&#xff1a;主机和路由器的统称 所以现在…

国土安全部发布关键基础设施安全人工智能框架

美国国土安全部 (DHS) 发布建议&#xff0c;概述如何在关键基础设施中安全开发和部署人工智能 (AI)。 https://www.dhs.gov/news/2024/11/14/groundbreaking-framework-safe-and-secure-deployment-ai-critical-infrastructure 关键基础设施中人工智能的角色和职责框架 https:/…

Windows系统电脑安装TightVNC服务端结合内网穿透实现异地远程桌面

文章目录 前言1. 安装TightVNC服务端2. 局域网VNC远程测试3. Win安装Cpolar工具4. 配置VNC远程地址5. VNC远程桌面连接6. 固定VNC远程地址7. 固定VNC地址测试 前言 在追求高效、便捷的数字化办公与生活的今天&#xff0c;远程桌面服务成为了连接不同地点、不同设备之间的重要桥…