linux客户端 存活检测,Linux下客户端检测服务器的 heartbeat

客户端代码,和一般的客户端不一样

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define MAXDATASIZE 100

int main()

{

int sockfd,nbytes,serv_port;

char buf_serv_ip[16],buf[260];

struct sockaddr_in serv_addr;

if((sockfd=socket(/*AF_INET,SOCK_STREAM,0*/PF_INET, SOCK_STREAM, IPPROTO_TCP))==-1){

perror("创建套接字失败!\n");

exit(1);

}

//创建套接字成功后设置其可重用的属性

int KeepAlive=1;

socklen_t KPlen=sizeof(int);

if(setsockopt(sockfd,SOL_SOCKET,SO_KEEPALIVE,(char *)&KeepAlive,KPlen)!=0){

perror("设置周期测试连接是否仍存活失败!\n");

exit(1);

}

int keepIdle = 10;//每次检测的相隔时间

int keepInterval = 1;//检测前的空间时间

int keepCount = 3;//最大检测次数

setsockopt(sockfd,SOL_TCP,TCP_KEEPINTVL,(void *)&keepIdle,sizeof(keepIdle));

setsockopt(sockfd,SOL_TCP,TCP_KEEPIDLE,(void *)&keepInterval,sizeof(keepInterval));

setsockopt(sockfd,SOL_TCP,TCP_KEEPCNT,(void *)&keepCount,sizeof(keepCount));

printf("请输入要连接主机的IP地址:\n");

scanf("%s",buf_serv_ip);

printf("请输入要连接主机的端口号:\n");

scanf("%d",&serv_port);

serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=inet_addr(buf_serv_ip);

serv_addr.sin_port=htons(serv_port);

bzero(&(serv_addr.sin_zero),8);

if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1){

perror("连接服务器失败!\n");

exit(1);

}

if((getsockopt(sockfd,SOL_SOCKET,SO_KEEPALIVE,(char*)&KeepAlive,&KPlen))==0){

printf("SO_KEEPALIVE Value: %d\n", KeepAlive);

}

printf("连接服务器成功!\n");

//在此处可以先接受判断将要接受数据的长度再创建数组

int i =0;

int res = 0;

int errcode;

fd_set readmask;

struct timeval timeout;

while(1){

FD_ZERO(&readmask);

FD_SET(sockfd, &readmask);

timeout.tv_sec = 1;

timeout.tv_usec = 0;

if ((res = select(sockfd + 1, &readmask, NULL, NULL, &timeout)) < 0)

{

printf("the socket is error\n");

exit(1);

}

printf("select return %d\n", res);

if(res == 0)

{//检测连接是否超时,可能服务器长时间没发数据

int sockfdtemp;

errno = 0;

printf("连接超时\n");

/*

if((sockfdtemp=socket(AF_INET,SOCK_STREAM,0))==-1){

perror("超时接字失败!\n");

exit(1);

}

if(connect(sockfdtemp,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1){

printf("超时连接服务器失败!\n");

errcode = errno;u

//close(sockfdtemp);

if (errcode != ENOENT && errcode != ECONNREFUSED) {

printf("Failed to establish connection: %d\n", errcode);

}

//continue;

//exit(1);

}else

{

printf("服务器没挂!\n");

//close(sockfdtemp);

}

close(sockfdtemp);

*/

continue;

}

/* 处理Slave端连接请求 */

if( (sockfd != -1 ) && FD_ISSET(sockfd, &readmask) )

{

printf("the socket is ok\n");

memset(buf, 0, 260);

errno = 0;

if((nbytes=recv(sockfd,buf,260,0))==-1){

printf("接受数据失败!\n");

errcode = errno;

if(errcode == ETIMEDOUT)

{//服务器真正的挂掉

printf("******服务器挂掉 %d : %d \n", errno, ETIMEDOUT);

exit(1);

}

}

if (nbytes == 0)

{

printf("数据为空: %d\n", i);

}

else

{

buf[nbytes]='\0';

printf("接受的数据为:%d\n", i);

}

}else

{

printf("the socket is not OK\n");

exit(1);

}

i++;

}

close(sockfd);

return 0;

}0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lua打开浏览器并加载网页_Lua访问网页

示例例子&#xff0c;实现https方式&#xff0c;登录网站&#xff0c;访问某个网页&#xff0c;修改其中参数的功能。其中xx应用时候需要修改。require("curl")local ipList {"192.168.1.1","192.168.1.1",}--登陆function loginWeb(ip)c curl.…

linux jar和zip,Linux命令———zip和jar文件压缩解压

Linux命令———zip和jar文件压缩解压(1)ubuntu 使用unzip和zip压缩文件1.功能作用&#xff1a;解压缩zip文件2.位置&#xff1a;/usr/bin/unzip3.格式用法&#xff1a;unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]4.主要参数-c 将解压缩的结果显示…

python去除中间空格只留一个_python 删除字符串中的连续空格只保留一个

Centos 6&period;5&lpar;64bit&rpar;上安装Vertica single node在Win8上使用虚拟机Virtualbox安装Centos6.5,想在上面安装vertica. 以下记录了我在安装的过程中遇到的问题与一些解决方案. 1.安装Centos的时候遇到了一个恼人的问题,即 ...大型网站系统架构实践(四)h…

安卓 linux找回内置存储,Android手机自带内部存储路径的获取

我有一台中兴的Android手机&#xff0c;型号是 ZTE U930HD&#xff0c;手机没有插入外置SD卡(也就是Micro SD Card&#xff0c;原名Trans-flash Card(TF卡)&#xff0c;2004年正式更名为Micro SD Card)&#xff0c;但是机身自带了一个内置存储卡(也就是eMMC存储&#xff0c;大小…

原生js获取document_原生JS常用API整理

Anchor 对象&#xff1a;指HTML超链接1.修改一个链接的文本&#xff0c;链接和target//html部分访问 Microsoft改变超链接的文本和 URL。也改变 target 属性。target 属性的默认设置是 "_self"&#xff0c;这意味着会在相同的窗口中打开链接。通过把 target 属性设置…

linux打包cpio命令例子,linux压缩命令——tar、cpio详解

常见的linux压缩方式&#xff1a;*.Z compress压缩*.gz gzip压缩*.bz2 bzip2压缩*.tar tar打包(没有压缩)*.tar.gz tar打包&#xff0c;并且经过gzip压缩*.tar.gz tar打包&#xff0c;并且经过bzip2压缩gzip、bzip2压缩是对单一文件压缩。下面就t…

flowjo汉化版_流式细胞分析软件FlowJo

FlowJo是一款专业的流式细胞分析软件&#xff0c;这款软件是流式领域最受推荐的一款专业分析软件&#xff0c;适合医学类的学生使用。软件能够帮助用户轻松了解了解细胞的状态变化, 拥有流动室和液流驱动系统&#xff0c;光电转换器和数据处理系统等先进的科学技术。软件特色&a…

c语言程序设计语言描述,C语言程序设计题目描述(详).txt

C语言程序设计题目描述(详).txtC01 pow1.05,n include void main float y1.05; int n1; FILE *p; /* * * * * * */ fprintfp,“d,.0f“,n,pow1.05,n; fclosep; C02 a11a002a11.aPaperdesign.dat include void main float a331.3,2.7,3.6,2,3,4.7,3,4,1.27; FILE *p; /* * * * *…

R语言smoothHR包_SmoothHR產品官方網站 全新體驗、正式上線 !

長期受許多國內外企業一致推薦及肯定的 SmoothHR 企業人資解決方案&#xff0c;新版網站正式上線了 ! 承襲 SmoothHR 備受肯定的視覺呈現&#xff0c;因應行動裝置的普遍運用&#xff0c;官方網站採用 RWD 響應式設計&#xff0c;帶給使用者跨裝置最佳的使用體驗 ! 並充分考慮使…

c程序设计语言 hello,Hello, World!

ch01-02-hello-world.mdcommit f63a103270ec8416899675a9cdb1c5cf6d77a498既然安装好了 Rust&#xff0c;我们来编写第一个 Rust 程序。当学习一门新语言的时候&#xff0c;使用该语言在屏幕上打印 Hello, world! 是一项传统&#xff0c;我们将沿用这一传统&#xff01;注意&am…

python object单引号变成双引号_Python学习第163课--Linux命令行中的单引号和双引号...

【每天几分钟&#xff0c;从零入门python编程的世界&#xff01;】我们都知道引号的作用就是为了引用&#xff0c;比如引用别人说的话&#xff0c;这句话就放在引号里面。而Linux命令行中的single quote(单引号)和dubble quote(双引号)有不同的作用。●双引号linux命令中双引号…

C语言条件循环语句执行步骤,C语言中for语句的执行过程是什么?

C语言中for语句的执行过程是&#xff1a;1、会先判断条件表达式是否成立&#xff0c;如果条件成立则执行中间循环体&#xff0c;执行完中间循环体后接着执行末尾循环体 &#xff1b;2、在执行完末尾循环体后对条件表达式再次判断&#xff0c;若条件还成立&#xff0c;则继续重复…

python平方数迭代器_Python三大神器之迭代器详解

我们将要来学习python的重要概念迭代和迭代器&#xff0c;通过简单实用的例子如列表迭代器和xrange。可迭代一个对象&#xff0c;物理或者虚拟存储的序列。list&#xff0c;tuple&#xff0c;strins&#xff0c;dicttionary&#xff0c;set以及生成器对象都是可迭代的&#xff…

c语言规范标准中英文,C语言中英文翻译资料.doc

C语言中英文翻译资料.docThe C Programming LanguageC is a high-level programming language developed by Dennis Ritchie and Brian Kernighan at Bell Labs in the mid-1970s. Although originally designed as a systems programming language, C has proved to be a powe…

lvm 扩展根目录_Lvm扩展根目录容量

2、新加一块硬盘&#xff0c;我的是sdb先创建物理卷[rootredhat6-3~]#fdisk/dev/sdbCommand(mforhelp):nCommandactioneextendedpprimarypartition(1-4)pPartitionnumber(1-4):1Firstcylinder(1-261,default1):(回车&#xff0c;默认将所有空间分配给第一个主分区)Usingdefault…

c语言趣味程序设计编程100例精解,c趣味编程100例

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include #include #include #include #include #include using namespace std;void z1();void z2();void z3();void z4();void z5();void z6();void z7();void z8();int c3(int, int);int draw(int(*)(double),…

SQL语言深入

数据库系统 数据库系统主要有以下 3 个组成部分&#xff1a; 1 . 数据库&#xff1a;用于存储数据的地方。 2 . 数据库管理系统&#xff1a;用于管理数据库的软件。 3 . 数据库应用程序&#xff1a;为了提高数据库系统的处理能力所使用的管理数据库库的软件补充。 数据库管…

tb项目管理实践_项目经理与项目管理整理

项目经理职责&#xff1a;要想项目的分配尽可能地准确&#xff0c;任务分配者必须了解项目研发相关的技术。进行产品开发过程中的业务目标、进度、成本、质量控制。挑选项目团队并进行团队建设&#xff0c;激发、鼓舞和改进团队的生产效率。识别项目干系人&#xff0c;定期向干…

加法的横式竖式教案c语言,20以内竖式加减法教案

【www.ahanw.cn--活动致辞】活动意图&#xff1a;数学的加减法运算很重要。特别是20以内的加减法是各种数字运算的基础。学好20以内的加减法&#xff0c;有利于活化孩子的头脑&#xff0c;发展孩子的思维。活动目标&#xff1a;1、感知进位加、退位减的算法&#xff0c;整理和归…

github随时同步代码_GitHub代码下载和同步

1.下载git客户端https://git-scm.com/ssh-keygen -C "youremail.address" -t rsa2. 把下面文件的内容复制到 https://github.com/settings/keysWindows:C:\Users\GengZhaoyun\.ssh\id_rsa.pubLinux:.ssh\id_rsa.pub测试是否配制正确ssh -T gitgithub.com显示Hi gengz…