久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4594|回復: 0
打印 上一主題 下一主題
收起左側

stm32+W5500 TCP Server自動發送keep-alive源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:416826 發表于 2018-10-28 18:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Keepalive即心跳檢測,以下簡稱KA,之所以稱之為心跳檢測是因為它像心跳一樣每隔一段時間發一次,以此來告訴對方自己是否存活。心跳檢測用于TCP通訊過程中服務器檢測客戶端是處于長時間空閑(在線)還是已經斷開,一般采用客戶端定時發送簡單的通訊包,一般是很小的包或者空包給服務器(W5200的心跳包為1字節),如果在指定時間內沒有收到該心跳包,則服務器會判斷客戶端已經斷開,此時程序中的Socket狀態機會轉到SOCKET_CLOSED并重新打開Socket去連接服務器/監聽客戶端。

單片機源程序如下:
  1. #include "mcu_init.h"
  2. #include "config.h"
  3. #include "device.h"
  4. #include "spi2.h"
  5. #include "socket.h"
  6. #include "w5500.h"
  7. #include "at24c16.h"
  8. #include "util.h"

  9. #include <stdio.h>

  10. extern uint8 txsize[];
  11. extern uint8 rxsize[];

  12. uint8 buffer[2048];/*定義一個2KB的緩存*/

  13. void main()
  14. {
  15.   uint16 port=30000;/*定義一個端口并初始化*/
  16.   uint16 len=0;
  17.    
  18.   uint8 mac[6]={0x00,0x08,0xdc,0x11,0x11,0x11};/*定義Mac變量*/
  19.   uint8 lip[4]={192,168,11,114};/*定義lp變量*/
  20.   uint8 sub[4]={255,255,255,0};/*定義subnet變量*/
  21.   uint8 gw[4]={192,168,11,1};/*定義gateway變量*/
  22.   uint8 ip[4];
  23.   
  24.   RCC_Configuration(); /* 配置單片機系統時鐘*/
  25.   GPIO_Configuration();/* 配置GPIO*/
  26.   NVIC_Configuration();/* 配置嵌套中斷向量*/
  27.   
  28.   Systick_Init(72);/* 初始化Systick工作時鐘*/
  29.   USART1_Init(); /*初始化串口通信:115200@8-n-1*/
  30.   at24c16_init();/*初始化eeprom*/
  31.   printf("W5500 EVB initialization over.\r\n");
  32.   
  33.   Reset_W5500();/*硬重啟W5500*/
  34.   WIZ_SPI_Init();/*初始化SPI接口*/
  35.   printf("W5500 initialized!\r\n");  

  36.   setSHAR(mac);/*配置Mac地址*/
  37.   setSUBR(sub);/*配置子網掩碼*/
  38.   setGAR(gw);/*配置默認網關*/
  39.   setSIPR(lip);/*配置Ip地址*/
  40.   
  41.     //Init. TX & RX Memory size of w5500
  42.   sysinit(txsize, rxsize); /*初始化8個socket*/
  43.   
  44.   setRTR(2000);/*設置溢出時間值*/
  45.   setRCR(3);/*設置最大重新發送次數*/
  46.   

  47.   getSIPR (ip);
  48.   printf("IP : %d.%d.%d.%d\r\n", ip[0],ip[1],ip[2],ip[3]);
  49.   getSUBR(ip);
  50.   printf("SN : %d.%d.%d.%d\r\n", ip[0],ip[1],ip[2],ip[3]);
  51.   getGAR(ip);
  52.   printf("GW : %d.%d.%d.%d\r\n", ip[0],ip[1],ip[2],ip[3]);
  53.   printf("Network is ready.\r\n");
  54.   setkeepalive(0);
  55.   while(1)
  56.   {
  57.     switch(getSn_SR(0))/*獲取socket0的狀態*/
  58.       {
  59.          case SOCK_INIT:/*socket初始化完成*/
  60.            listen(0);/*在TCP模式下向服務器發送連接請求*/
  61.              break;
  62.          case SOCK_ESTABLISHED:/*socket連接建立*/
  63.            if(getSn_IR(0) & Sn_IR_CON)
  64.            {
  65.               setSn_IR(0, Sn_IR_CON);/*Sn_IR的第0位置1*/
  66.             }
  67.            len=getSn_RX_RSR(0);/*len為已接收數據的大小*/
  68.            if(len>0)
  69.            {
  70.               recv(0,buffer,len);/*W5200接收來自Sever的數據*/
  71.               send(0,buffer,len);/*W5200向Server發送數據*/
  72.            }
  73.             printf("建立連接狀態.\r\n");  
  74.            // send_ka(0);
  75.            break;
  76.          case SOCK_CLOSE_WAIT:/*socket等待關閉狀態*/
  77.            break;
  78.          case SOCK_CLOSED:/*socket關閉*/
  79.             printf("closed 狀態.\r\n");
  80.            socket(0,Sn_MR_TCP,port,Sn_MR_ND);/*打開socket0的一個端口*/
  81.            break;
  82.      }
  83.   }
  84. }
復制代碼

所有資料51hei提供下載:
W5500 TCP Server自動發送keep-alive.rar (3.74 MB, 下載次數: 129)





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费在线观看一区二区 | 精品国产31久久久久久 | 91原创视频 | 日韩欧美在线不卡 | 国产精品毛片 | 久久久久久久综合 | 日韩精品久久久久久 | 成人在线观看免费 | 中文福利视频 | 国产伦精品一区二区三区精品视频 | 久久精品一区二区三区四区 | 一区二区精品视频 | 欧美精品一二区 | 国产在线第一页 | 国产成人免费在线 | 黄色在线观看 | www.日韩 | 爱草在线 | 亚洲精品区 | 日韩色综合 | 美国av片在线观看 | 青青草精品| 国产精品久久久久久久久久久久午夜片 | 日韩精品一区二区三区视频播放 | 欧美精品一区二区免费 | 欧美一级免费看 | 日日做夜夜爽毛片麻豆 | 91毛片在线观看 | 国产一区二区在线免费观看 | 欧美日韩精品一区二区三区蜜桃 | 在线看av网址 | 婷婷成人在线 | 国产在线精品一区二区 | 亚洲欧美日韩在线一区二区 | 性色在线 | 日韩在线资源 | 色婷婷国产精品综合在线观看 | www.久久.com| 精品国产青草久久久久96 | 日本不卡一区二区三区 | 男人的天堂亚洲 |