5.5 W5500 TCP服务端与客户端

news2024/11/26 22:13:14

文章目录

  • 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.coloradmin.cn/o/2248068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Transformer详解及衍生模型GPT|T5|LLaMa

简介 Transformer 是一种革命性的神经网络架构&#xff0c;首次出现在2017年的论文《Attention Is All You Need》中&#xff0c;由Google的研究团队提出。与传统的RNN和LSTM模型不同&#xff0c;Transformer完全依赖于自注意力&#xff08;Self-Attention&#xff09;机制来捕…

计算机网络基础全攻略:探秘网络构建块(1/10)

一、计算机网络基础概念 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路和通信设备连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统…

Android 应用测试的各种环境问题记录(Instrumentation测试)

报错记录 failed to configure packages targetSdkVersion&#xff08;未解决&#xff09; failed to configure com.demo.test.SettingsActivityTest.testOnCreate_withNullSavedInstanceState: Package targetSdkVersion34 > maxSdkVersion32 java.lang.IllegalArgumentE…

Python 爬虫从入门到(不)入狱学习笔记

爬虫的流程&#xff1a;从入门到入狱 1 获取网页内容1.1 发送 HTTP 请求1.2 Python 的 Requests 库1.2 实战&#xff1a;豆瓣电影 scrape_douban.py 2 解析网页内容2.1 HTML 网页结构2.2 Python 的 Beautiful Soup 库 3 存储或分析数据&#xff08;略&#xff09; 一般爬虫的基…

周志华深度森林deep forest(deep-forest)最新可安装教程,仅需在pycharm中完成,超简单安装教程

1、打开pycharm 没有pycharm的&#xff0c;在站内搜索安装教程即可。 2、点击“文件”“新建项目” 3、创建项目&#xff0c;Python版本中选择Python39。如果没有该版本&#xff0c;选择下面的Python 3.9下载并安装。 4、打开软件包&#xff0c;搜索“deep-forest”软件包&am…

用python将一个扫描pdf文件改成二值图片组成的pdf文件

使用墨水屏读书现在似乎越来越流行&#xff0c;这确实有一定的好处&#xff0c;例如基本不发热&#xff0c;电池续航时间超长&#xff0c;基本不能游戏所以有利于沉浸式阅读&#xff0c;还有不知道是不是真的有用的所谓防蓝光伤害。但是&#xff0c;如果阅读的书籍是扫描图片组…

前端---HTML(一)

HTML_网络的三大基石和html普通文本标签 1.我们要访问网络&#xff0c;需不需要知道&#xff0c;网络上的东西在哪&#xff1f; 为什么我们写&#xff0c;www.baidu.com就能找到百度了呢&#xff1f; 我一拼ping www.baidu.com 就拼到了ip地址&#xff1a; [119.75.218.70]…

电影风格城市夜景旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 电影风格城市夜景旅拍通过 Lightroom 调色&#xff0c;将城市夜晚的景色打造出如同电影画面般的质感和氛围。以独特的色彩和光影处理&#xff0c;展现出城市夜景的魅力与神秘。 预设信息 调色风格&#xff1a;电影风格预设适合类型&#xff1a;人像&#xff0c;街拍…

【多模态】Flamingo模型技术学习

Flamingo模型技术学习 前言Flamingo——支持上下文学习的多模态模型模型架构模型架构——Resampler模型架构——插入到LLM的cross-attention层 代码查看——masked cross-attentionnote 前言 最近多模态模型特别火&#xff0c;从头开始学习&#xff01;在前面写的几篇里面学习了…

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)…

ctfshow单身杯2024wp

文章目录 ctfshow单身杯2024wp签到好玩的PHPezzz_sstiez_inject ctfshow单身杯2024wp 签到好玩的PHP 考点&#xff1a;序列化反序列化 <?phperror_reporting(0);highlight_file(__FILE__);class ctfshow {private $d ;private $s ;private $b ;private $ctf ;public …

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

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

【Mybatis】@Param注解 resultMap手动映射

文章目录 一、映射文件参数二、查询映射2-1 一对一2-2 一对多2-3 总结 一、映射文件参数 Param 注解官方文档解释 1、单个参数&#xff08;对象&#xff09;不使用注解 public int save(User user);<!-- 添加用户 --> <insert id"save" parameterType&quo…

Unreal从入门到精通之如何绘制用于VR的3DUI交互的手柄射线

文章目录 前言实现方式MenuLaser实现步骤1.Laser和Cursor2.移植函数3.启动逻辑4.检测射线和UI的碰撞5.激活手柄射线6.更新手柄射线位置7.隐藏手柄射线8.添加手柄的Trigger监听完整节点如下:效果图前言 之前我写过一篇文章《Unreal5从入门到精通之如何在VR中使用3DUI》,其中讲…

风尚云网前端学习:一个简易前端新手友好的HTML5页面布局与样式设计

风尚云网前端学习&#xff1a;一个简易前端新手友好的HTML5页面布局与样式设计 简介 在前端开发的世界里&#xff0c;HTML5和CSS3是构建现代网页的基石。本文将通过一个简单的HTML5页面模板&#xff0c;展示如何使用HTML5的结构化元素和CSS3的样式特性&#xff0c;来创建一个…

STM32WB55RG开发(5)----监测STM32WB连接状态

STM32WB55RG开发----5.生成 BLE 程序连接手机APP 概述硬件准备视频教学样品申请源码下载参考程序选择芯片型号配置时钟源配置时钟树RTC时钟配置RF wakeup时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙LED配置设置工程信息工程文件设置参考文档SVCCTL_A…

RK356x-10:串口(uart)配置与调试

本文记录RK3566/RK3568通用异步串口(uart)的配置与调试过程 1. 配置uart节点 1.1 在rk3568.dtsi中已经定义了uart0,uart1...&#xff0c;根据电路图&#xff0c;确定需要使用的是哪个串口&#xff0c;比如我使用的是uart0&#xff0c;在另外一个与我们自己主板相关的dtsi文件&…

【C++】从C到C++

C和C一些语法区别 1.三目运算符&#xff1a;在C语言中返回的是一个常量&#xff0c;是不能被赋值的&#xff1b;而C中返回的是变量&#xff0c;可以被赋值 2.C中的函数必须要写返回值类型 3.在全局下&#xff0c;C不允许int a;和int a10;等这种重定义二义性操作 4.在C中不要…

WSL安装不同版本ubuntu(已有ubuntu20.04,再装ubuntu18.04)

参考&#xff1a; 如何在 WSL 中删除指定版本的 Ubuntu&#xff08;以删除 Ubuntu 22.04 为例&#xff09;_wsl卸载某个-CSDN博客 已有ubuntu20.04&#xff0c;现在再安装一个ubuntu18.04 直接参考下面我写的链接的第四步&#xff0c;前面的步骤都不需要再做了 Win11安装WSL…

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

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