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 故障容错 客户端主动发起连接相关推荐

  1. 客户端主动断开连接_Go实现客户端和服务器抓包分析TCP三次握手和断开操作

    本文主要是想通过抓包工具分析一下TCP三次握手和断开过程: 1.TCP三次握手建立连接和断开连接解释,如下图: TCP三次握手建立连接和断开连接 2.通过WireShark抓包查看这个TCP过程,数据 ...

  2. 【mysql是怎样运行的】-客户端与服务器连接

    文章目录 1. 几种连接方式 1.1 TCP/IP 1.2 命名管道和共享内存 1.3 UNIX 域套接字 2. 服务器处理客户端请求 2.1 连接管理 2.2 解析与优化 2.3 存储引擎 1. 几 ...

  3. LwIP应用开发笔记之八:LwIP无操作系统HTTP客户端

    前面我们实现了TCP服务器和客户端的简单应用,接下来我们实现一个基于TCP协议的应用协议,那就是HTTP超文本传输协议 1.HTTP协议简介 超文本传输协议(Hyper Text Transfer P ...

  4. LwIP应用开发笔记之六:LwIP无操作系统TCP客户端

    上一篇我们基于LwIP协议栈的RAW API实现了一个TCP服务器的简单应用,接下来一节我们来实现一个TCP客户端的简单应用. 1.TCP简述 TCP(Transmission Control Pro ...

  5. Stm32CubeMx lwip+freeRTOS TCP 服务

    如何添加lwip参照上一篇   stm32CubeMx lwip + freeRTOS 今天讲一下,如何添加TCP服务 LwIP 提供了三种编程接口,分别为 RAW/Callback API.NETC ...

  6. 服务端向客户端主动发送消息

    通常情况下,无论是web浏览器还是移动app,我们与服务器之间的交互都是主动的,客户端向服务器端发出请求,然后服务器端返回数据给客户端,客户端浏览器再将信息呈现,客户端与服务端对应的模式是: 客户端请 ...

  7. PHP 在 Nginx 下主动断开连接 Connection Close 与 ignore_user_abort 后台运行

    这两天弄个PHP调用 SVN 同步 update 多台服务器更新的程序,为了避免 commit 的时候不会被阻塞卡半天得想个办法只请求触发,而不需要等待程序 update 完成返回结果这样耗时太长,所 ...

  8. mysql数据库断开连接_解决mysql服务器在无操作超时主动断开连接的情况

    我们在使用mysql服务的时候,正常情况下,mysql的设置的timeout是8个小时(28800秒),也就是说,如果一个连接8个小时都没有操作,那么mysql会主动的断开连接,当这个连接再次尝试查询 ...

  9. java spring 服务器关闭连接_java springboot websocket 服务 服务器主动关闭连接 导致 抛出java.io.EOFException异常...

    遇到这个问题不要慌,去查查众说纷纭.那我就在这里总结一下吧 存在此问题的有以下几种情况 1.ws连接不稳定经常断线: 答: 1)可能是客户和服务器之间的网络问题 2)可能是服务端内存不够用导致线程被异 ...

最新文章

  1. 关于Python中的yield(转载)
  2. java学习笔记6--类的继承、Object类
  3. Oracle11G数据泵支持,Oracle11gr2数据泵新特性(五)
  4. IO-6(PrintStream/PrintWriter)
  5. 优秀HTML5网站学习范例:从“饥饿游戏浏览器”谈用户体验
  6. 【课后服务】20181022切蛋糕
  7. STM32 定时器输出pwm的频率计算方法 PWM 频率检测方法 直流电机的位置控制
  8. TensorFlow实现深度学习算法的教程汇集:代码+笔记
  9. Java判断浏览器类型
  10. C语言数据结构、十字链表的分析及实现
  11. excel vba两个单元格内容合并
  12. 阿里云云数据库RDS基本介绍与购买流程(二十二)
  13. 快递单号中的派件时效该怎么查?
  14. vscode中好用的git相关的插件
  15. ThingsBoard RPC control
  16. 《C++ Primer Plus》学习笔记-string类和标准模板库
  17. Windows自定义右键菜单
  18. kindeditor=4.1.5文件上传漏洞复现
  19. 看片显示服务器不稳定,无限“看片”,资源随便下,这回爽了!
  20. Rest Api 项目添加 Basic Auth 认证

热门文章

  1. 串行线路上传输数据报的非标准协议:SLIP
  2. mysql 从服务器同步设置_mysql主从同步配置
  3. hql可以使用distinct吗_输送食品可以使用白色PVC输送带吗?
  4. python变量输出到文件_使用函数将多个变量写入文件
  5. android界面布局错位,IOS 浏览器页面布局错位(如:点不到)的分析与解决
  6. Python文件上传功能简单实现
  7. pytest配置文件pytest.ini
  8. Linux C 数据结构——二叉树
  9. 对vector中的数据排序
  10. Android项目目录结构