一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

java中的心跳包是如何發送的?心跳檢測實現2.1-速讀

來源:CSDN 時間:2023-04-24 08:22:32

1. 心跳機制簡介

在長連接下,可能很長一段時間都沒有數據往來。理論上說,這個連接是一直保持連接的,但是實際情況中,如果中間節點出現什么故障是難以知道的。更致命的是,有的節點(防火墻)會自動把一定時間之內沒有數據交互的連接給斷掉。這個時候,就可以使用心跳包,來維持長連接以及保活

心跳機制就是每隔幾分鐘發送一個固定信息給服務端,服務端收到后回復一個固定信息如果服務端幾分鐘內沒有收到客戶端信息則視客戶端斷開。發包方可以是客戶也可以是服務端,具體看哪邊實現更方便合理


(資料圖)

心跳包的發送通常有以下兩種技術:

1、應用層自已實現的心跳包:

由應用程序自己發送心跳包來檢測連接是否正常,服務器每隔一定時間向客戶端發送一個短小的數據包,然后啟動一個線程,在線程中不斷檢測客戶端的回應, 如果在一定時間內沒有收到客戶端的回應,即認為客戶端已經掉線;同樣,如果客戶端在一定時間內沒有收到服務器的心跳包,則認為連接不可用

2、使用SO_KEEPALIVE套接字選項:

在TCP的機制里面,本身是存在有心跳包的機制的,也就是TCP的選項. 不論是服務端還是客戶端,一方開啟KeepAlive功能后,就會自動在規定時間內向對方發送心跳包, 而另一方在收到心跳包后就會自動回復,以告訴對方我仍然在線

2. 心跳檢測實現

2.1 setsockopt函數介紹

函數功能:設置與某個套接字關聯的選項。選項可能存在于多層協議中,它們總會出現在最上面的套接字層。當操作套接字選項時,選項位于的層和選項的名稱必須給出。為了操作套接字層的選項,應該將層的值指定為SOL_SOCKET。為了操作其它層的選項,控制選項的合適協議號必須給出。例如,為了表示一個選項由TCP協議解析,層應該設定為協議號TCP

函數原型:int setsockopt(int sock, //將要被設置選項的套接字int level, //選項所在的協議層int optname, //需要訪問的選項名const void *optval, //指向包含新選項值得緩沖socklen_t optlen)//現選項的長度返 回 值:成功返回0;失敗返回-1

參數(level)詳細說明:level是指定控制套接字的層次,可以取如下三種值

SOL_SOCKET:通用套接字選項

選項名稱(optname)

說明

數據類型========================================================================SO_BROADCAST

允許發送廣播數據

intSO_DEBUG

允許調試

intSO_DONTROUTE

不查找

intSO_ERROR

獲得套接字錯誤

intSO_KEEPALIVE

保持連接

intSO_LINGER

延遲關閉連接

struct lingerSO_OOBINLINE

帶外數據放入正常數據流

intSO_RCVBUF

接收緩沖區大小

intSO_SNDBUF

發送緩沖區大小

intSO_RCVLOWAT

接收緩沖區下限

intSO_SNDLOWAT

發送緩沖區下限

intSO_RCVTIMEO

接收超時

struct timevalSO_SNDTIMEO

發送超時

struct timevalSO_REUSERADDR

允許重用本地地址和端口

intSO_TYPE

獲得套接字類型

intSO_BSDCOMPAT

與BSD系統兼容

int========================================================================

IPPROTO_IP:IP選項

選項名稱(optname)

說明

數據類型========================================================================IP_HDRINCL

在數據包中包含IP首部

intIP_OPTINOS

IP首部選項

intIP_TOS

類型IP_TTL

生存時間

int========================================================================

IPPROTO_TCP:TCP選項

選項名稱(optname)

說明

數據類型========================================================================TCP_MAXSEG

TCP最大數據段的大小

intTCP_NODELAY

不使用Nagle算法

int========================================================================

2.2 心跳機制的實現

該實例實現的功能:在TCP客戶端代碼中加入心跳機制,使服務端在斷網重連(與客戶端)后,能自動保持連接

參考Socket API編程優化一文,在該文的工程源碼基礎上進行修改keepalive宏開關:將opt.h文件中的LWIP_TCP_KEEPALIVE宏定義開啟

/** * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set * in seconds. (does not require sockets.c, and will affect tcp.c) */#if !defined LWIP_TCP_KEEPALIVE || defined __DOXYGEN__#define LWIP_TCP_KEEPALIVE              1#endif

setsockopt參數含義:sockets.h文件中可以看到如下setsockopt參數的設置

#define SO_KEEPALIVE   0x0008  /* 保持連接 */  #define TCP_KEEPIDLE   0x03    /* 發送心跳空閑周期 S*/ #define TCP_KEEPINTVL  0x04    /* 發送心跳間隔 S */  #define TCP_KEEPCNT    0x05    /* 心跳重發次數 */

在工程中創建tcp_keepalive.c和對應的頭文件

#include "socket_tcp_server.h"#include "tcp_keepalive.h"#include "socket_wrap.h"#include "ctype.h"#include "FreeRTOS.h"#include "task.h"static char ReadBuff[BUFF_SIZE];void vTcpKeepaliveTask(void){  int cfd, n, i, ret;  struct sockaddr_in server_addr;  int so_keepalive_val = 1;  int tcp_keepalive_idle = 3;  int tcp_keepalive_intvl = 3;  int tcp_keepalive_cnt = 3;  int tcp_nodelay = 1;again:  //創建socket  cfd = Socket(AF_INET, SOCK_STREAM, 0);  //使能socket層的心跳檢測  setsockopt(cfd, SOL_SOCKET, SO_KEEPALIVE, &so_keepalive_val, sizeof(int));  server_addr.sin_family = AF_INET;  server_addr.sin_port = htons(SERVER_PORT);  server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);  /*連接到服務器(connect是一個阻塞接口,內部要完成TCP的三次握手;    里面有超時機制,所以需要等一段時間,才能重新連接到服務器)*/  ret = Connect(cfd, (struct sockaddr*)&server_addr, sizeof(server_addr));  if(ret < 0){//100ms去連接一次服務器vTaskDelay(100);goto again;  }  //配置心跳檢測參數   默認參數時間很長  setsockopt(cfd, IPPROTO_TCP, TCP_KEEPIDLE, &tcp_keepalive_idle, sizeof(int));  setsockopt(cfd, IPPROTO_TCP, TCP_KEEPINTVL, &tcp_keepalive_intvl, sizeof(int));  setsockopt(cfd, IPPROTO_TCP, TCP_KEEPCNT, &tcp_keepalive_cnt, sizeof(int));  setsockopt(cfd, IPPROTO_TCP, TCP_NODELAY, &tcp_nodelay, sizeof(int));  printf("server is connect ok\r\n");  while(1){//等待服務器發送數據n = Read(cfd, ReadBuff, BUFF_SIZE);if(n <= 0){  goto again;}//進行大小寫轉換for(i = 0; i < n; i++){      ReadBuff[i] = toupper(ReadBuff[i]);}//寫回服務器n = Write(cfd, ReadBuff, n);if(n <= 0){  goto again;}  }}

在freertos.c文件中的默認任務里面添加代碼

void StartDefaultTask(void const * argument){  /* init code for LWIP */  MX_LWIP_Init();  /* USER CODE BEGIN StartDefaultTask */  printf("TCP keepalive test!\r\n");  /* Infinite loop */  for(;;){    vTcpKeepaliveTask();osDelay(100);  }  /* USER CODE END StartDefaultTask */}

責任編輯:

標簽: 客戶端

相關推薦:

精彩放送:

新聞聚焦
Top 一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四
免费亚洲网站| 欧美在线免费看| 亚洲午夜极品| 欧美婷婷久久| 午夜精品av| 在线观看三级视频欧美| 美女久久网站| 一区二区免费看| 国产亚洲精品7777| 欧美h视频在线| 亚洲永久免费视频| 一区二区三区在线视频播放| 欧美激情精品| 欧美一区中文字幕| 亚洲人线精品午夜| 国产日韩综合| 欧美激情aⅴ一区二区三区| 亚洲天堂成人在线观看| 狠久久av成人天堂| 国产精品jizz在线观看美国| 久久久久久尹人网香蕉| 亚洲视频 欧洲视频| 激情成人亚洲| 国产精品v欧美精品v日韩 | 久久综合电影一区| 一区二区三区视频在线观看| 狠狠色综合日日| 国产精品久久国产三级国电话系列| 久久精品一区二区国产| 亚洲一级高清| 亚洲精品四区| 在线观看亚洲a| 国产欧美日韩精品a在线观看| 欧美成人精品在线观看| 久久精品免视看| 亚洲综合色激情五月| 亚洲精品乱码久久久久| 在线播放视频一区| 国产午夜亚洲精品羞羞网站| 欧美丝袜一区二区| 欧美激情一区二区三区在线视频| 久久久久久久综合狠狠综合| 亚洲一区二区三区免费在线观看| 亚洲欧洲精品成人久久奇米网| 狠狠v欧美v日韩v亚洲ⅴ| 国产日韩欧美在线一区| 国产精品嫩草久久久久| 国产精品乱码人人做人人爱| 欧美视频一区二区三区四区| 欧美日本三区| 欧美日韩在线播放| 欧美性理论片在线观看片免费| 欧美精品国产精品日韩精品| 欧美福利视频网站| 欧美激情第三页| 欧美精品免费看| 欧美日韩亚洲综合| 欧美视频在线观看免费| 国产精品成人一区二区三区吃奶| 欧美性猛交视频| 国产欧美精品在线播放| 国产一区二区三区久久久久久久久 | 久久久综合视频| 欧美一级网站| 久久久国产精品一区二区三区| 久久精品国产免费| 蜜臀av性久久久久蜜臀aⅴ| 久久影视三级福利片| 久久一区二区三区国产精品| 老司机午夜精品视频在线观看| 欧美99在线视频观看| 欧美激情国产高清| 国产精品电影观看| 国产亚洲一区二区在线观看| 激情综合色综合久久| 亚洲日本国产| 羞羞答答国产精品www一本| 久久精品国产69国产精品亚洲| 久色成人在线| 欧美性色aⅴ视频一区日韩精品| 国产欧美日韩在线播放| 在线观看欧美亚洲| 亚洲视频视频在线| 久久爱www.| 欧美日韩hd| 国产精品一区二区三区观看| 在线日韩av永久免费观看| 99国产精品久久久| 久久精品国产77777蜜臀| 欧美日韩第一区日日骚| 国产亚洲欧洲| 中国女人久久久| 久久综合狠狠综合久久综青草| 欧美日韩国产区一| 狠狠爱综合网| 亚洲视频欧洲视频| 老**午夜毛片一区二区三区| 欧美色欧美亚洲高清在线视频| 国产亚洲欧美激情| 一区二区三区欧美激情| 蜜月aⅴ免费一区二区三区 | 国产精品网曝门| 亚洲国产综合视频在线观看| 亚洲专区在线| 欧美人妖在线观看| 狠狠色狠狠色综合| 亚洲综合成人在线| 欧美极品aⅴ影院| 在线观看不卡av| 欧美中文字幕| 国产精品国产三级国产专播精品人 | 免费不卡亚洲欧美| 国产日韩欧美精品一区| 一个色综合av| 欧美肥婆在线| 亚洲国产精品成人久久综合一区| 欧美亚洲三区| 国产婷婷精品| 性色av一区二区三区在线观看| 欧美日韩视频在线观看一区二区三区 | 亚洲国产综合在线看不卡| 久久国产一区二区| 国产精品入口尤物| 亚洲无线视频| 国产精品老牛| 亚洲一区二区免费| 欧美视频一区二区| 在线视频亚洲| 国产精品久久久久久影院8一贰佰| 亚洲精品视频免费在线观看| 欧美成黄导航| 亚洲精品午夜| 欧美日韩亚洲一区二| 一本色道久久综合亚洲精品高清| 欧美第十八页| 91久久精品国产91性色tv| 欧美激情91| 91久久久在线| 午夜视频精品| 亚洲国产欧美在线人成| 欧美成人r级一区二区三区| 欧美中文字幕精品| 久久精品视频免费播放| 18成人免费观看视频| 国产精品一区在线观看| 午夜欧美大尺度福利影院在线看 | 欧美高清视频在线播放| 欧美精品七区| 99在线观看免费视频精品观看| 国产亚洲精品久久久久久| 国内在线观看一区二区三区| 国产亚洲精品一区二区| 国产欧美日韩亚洲精品| 国产精品久久久久久影视| 欧美午夜一区二区三区免费大片 | 欧美国产综合| 欧美激情一级片一区二区| 欧美三级免费| 欧美一区二区三区四区在线观看地址 | 亚洲欧洲在线播放| 欧美激情精品久久久| 宅男在线国产精品| 国内精品视频在线播放| 鲁大师影院一区二区三区| 日韩系列在线| 国产一级揄自揄精品视频| 美乳少妇欧美精品| 在线视频欧美日韩| 韩国一区二区三区美女美女秀| 你懂的亚洲视频| 亚洲欧美欧美一区二区三区| 亚洲成色777777在线观看影院| 欧美日本在线看| 久久久一区二区三区| 日韩写真视频在线观看| 国产有码一区二区| 欧美日韩情趣电影| 久热精品在线视频| 欧美一区二区三区啪啪| 亚洲国产另类久久久精品极度| 国产精品视频免费观看| 免费久久99精品国产自| 亚洲欧美清纯在线制服| 亚洲精品影视在线观看| 精品成人在线视频| 国产乱人伦精品一区二区| 欧美精品综合| 男人插女人欧美| 久久久伊人欧美| 久久精品日韩欧美| 亚洲欧美日韩中文视频| 最新中文字幕一区二区三区| 国内久久视频| 国产免费一区二区三区香蕉精| 欧美日韩裸体免费视频| 欧美成人69av| 蜜月aⅴ免费一区二区三区 | 亚洲一区二区精品在线观看| 亚洲国产精品免费| 国产综合婷婷|