lwip+freeRTOS 故障容错 客户端主动发起连接
生活随笔
收集整理的這篇文章主要介紹了
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 故障容错 客户端主动发起连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vb.net 读写cookie
- 下一篇: 云服务器开启TCP Server 客户端