lwip+freeRTOS 故障容错 客户端主动发起连接
1、简单的需求
STM32终端为tcp客户端,主动向TCP服务器发起连接,然后进行通信。
流程:STM32网卡初始化-----lwIP初始化--------DHCP-------------creat socket Client-------send-------recv
2、实际情况
(1)如何处理拔掉网线的情况
(2)如何处理TCP服务器没开的情况,即判断socket状态
3、解决办法
新建两个变量is_netif_ok,is_server_closed用于表示实际的两种情况。
如果网线拔掉,关闭当前socket;如果服务器关闭,关闭当前socket;如果网线再插上,重新创建socket client进行连接。
3.1 处理把掉网线
首先配置lwIP支持网线热插拔检测功能,这里讲清楚了 https://blog.csdn.net/u010058695/article/details/116200135?spm=1001.2014.3001.5501
当网线状态变化时,给全局变量is_netif_ok赋值即可
3.2 处理服务器连接状态
recv函数配置成阻塞状态时,可以通过其返回值来判断当前socket连接状态,也就是判断服务器的状态。返回值小于等于零即socket出现问题,给is_server_closed赋值即可。
3.3 主动连接的实现代码
/* Infinite loop */for(;;){if (is_netif_ok){if (!is_server_closed){/*! client not created */if (-1 == client_id){int creat_res = creat_tcp_client(&client_id,SOCKET_SERVER_ADDR,SOCKET_SERVER_PORT);if (creat_res != 0) {DEBUG("creat_tcp_client error: res = %d\r\n", creat_res);} else {DEBUG("creat_tcp_client success\r\n");}}} else {/*! server is closed */if (-1 != client_id){close_tcp_client(client_id);client_id = -1;}is_server_closed = 0;/*! assume server is running */}} else if (-1 != client_id){close_tcp_client(client_id);client_id = -1;}osDelay(1);}
lwip+freeRTOS 故障容错 客户端主动发起连接相关推荐
- 客户端主动断开连接_Go实现客户端和服务器抓包分析TCP三次握手和断开操作
本文主要是想通过抓包工具分析一下TCP三次握手和断开过程: 1.TCP三次握手建立连接和断开连接解释,如下图: TCP三次握手建立连接和断开连接 2.通过WireShark抓包查看这个TCP过程,数据 ...
- 【mysql是怎样运行的】-客户端与服务器连接
文章目录 1. 几种连接方式 1.1 TCP/IP 1.2 命名管道和共享内存 1.3 UNIX 域套接字 2. 服务器处理客户端请求 2.1 连接管理 2.2 解析与优化 2.3 存储引擎 1. 几 ...
- LwIP应用开发笔记之八:LwIP无操作系统HTTP客户端
前面我们实现了TCP服务器和客户端的简单应用,接下来我们实现一个基于TCP协议的应用协议,那就是HTTP超文本传输协议 1.HTTP协议简介 超文本传输协议(Hyper Text Transfer P ...
- LwIP应用开发笔记之六:LwIP无操作系统TCP客户端
上一篇我们基于LwIP协议栈的RAW API实现了一个TCP服务器的简单应用,接下来一节我们来实现一个TCP客户端的简单应用. 1.TCP简述 TCP(Transmission Control Pro ...
- Stm32CubeMx lwip+freeRTOS TCP 服务
如何添加lwip参照上一篇 stm32CubeMx lwip + freeRTOS 今天讲一下,如何添加TCP服务 LwIP 提供了三种编程接口,分别为 RAW/Callback API.NETC ...
- 服务端向客户端主动发送消息
通常情况下,无论是web浏览器还是移动app,我们与服务器之间的交互都是主动的,客户端向服务器端发出请求,然后服务器端返回数据给客户端,客户端浏览器再将信息呈现,客户端与服务端对应的模式是: 客户端请 ...
- PHP 在 Nginx 下主动断开连接 Connection Close 与 ignore_user_abort 后台运行
这两天弄个PHP调用 SVN 同步 update 多台服务器更新的程序,为了避免 commit 的时候不会被阻塞卡半天得想个办法只请求触发,而不需要等待程序 update 完成返回结果这样耗时太长,所 ...
- mysql数据库断开连接_解决mysql服务器在无操作超时主动断开连接的情况
我们在使用mysql服务的时候,正常情况下,mysql的设置的timeout是8个小时(28800秒),也就是说,如果一个连接8个小时都没有操作,那么mysql会主动的断开连接,当这个连接再次尝试查询 ...
- java spring 服务器关闭连接_java springboot websocket 服务 服务器主动关闭连接 导致 抛出java.io.EOFException异常...
遇到这个问题不要慌,去查查众说纷纭.那我就在这里总结一下吧 存在此问题的有以下几种情况 1.ws连接不稳定经常断线: 答: 1)可能是客户和服务器之间的网络问题 2)可能是服务端内存不够用导致线程被异 ...
最新文章
- 关于Python中的yield(转载)
- java学习笔记6--类的继承、Object类
- Oracle11G数据泵支持,Oracle11gr2数据泵新特性(五)
- IO-6(PrintStream/PrintWriter)
- 优秀HTML5网站学习范例:从“饥饿游戏浏览器”谈用户体验
- 【课后服务】20181022切蛋糕
- STM32 定时器输出pwm的频率计算方法 PWM 频率检测方法 直流电机的位置控制
- TensorFlow实现深度学习算法的教程汇集:代码+笔记
- Java判断浏览器类型
- C语言数据结构、十字链表的分析及实现
- excel vba两个单元格内容合并
- 阿里云云数据库RDS基本介绍与购买流程(二十二)
- 快递单号中的派件时效该怎么查?
- vscode中好用的git相关的插件
- ThingsBoard RPC control
- 《C++ Primer Plus》学习笔记-string类和标准模板库
- Windows自定义右键菜单
- kindeditor=4.1.5文件上传漏洞复现
- 看片显示服务器不稳定,无限“看片”,资源随便下,这回爽了!
- Rest Api 项目添加 Basic Auth 认证