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;
}
linux客户端 存活检测,Linux下客户端检测服务器的 heartbeat相关推荐
- linux msgrcv阻塞接收_linux下高并发服务器实现
在做网络服务的时候tcp并发服务端程序的编写必不可少.tcp并发通常有几种固定的设计模式套路,他们各有优点,也各有应用之处.下面就简单的讨论下这几种模式的差异: 单进程,单线程 在accept之后,就 ...
- g++ linux 编译开栈_Linux下编写C++服务器(配置C++编译调试环境)
Linux下编写C++服务器(配置C++编译调试环境) 安装好linux虚拟机,确定能上网后,我们可以开始编写C++程序了,但在这之前我们需要下载编译器和调试器 下载gcc 1.在终端输入yum se ...
- 专门入侵检测linux叫什么,入侵检测系统分析及其在Linux下的实现(上)
一.入侵检测系统分析 1.1 什么是入侵检测系统 所谓入侵,是指任何试图危及计算机资源的完整性.机密性或可用性的行为.而入侵检测,顾名思义,便是对入侵行为的发觉.它通过从计算机网络或系统中的若干关键点 ...
- Linux下内存检测工具:asan
Linux下内存检测工具:asan ASAN(Address-Sanitizier)早先是LLVM中的特性,后被加入GCC 4.8,在GCC 4.9后加入对ARM平台的支持.因此GCC 4.8以上版本 ...
- 修复linux bash破壳漏洞,Linux下bash破壳漏洞检测及修复的方法
如果Linux服务器存在bash破壳漏洞,将可能导致远程攻击者操作系统来执行任意命令,威胁等级较高,我想要知道我的Linux服务器是否存在bash破壳漏洞,以及如何来保护我的Linux服务器不受破壳漏 ...
- linux系统漏洞测试过程,Linux下bash破壳漏洞检测方法
如果Linux服务器存在bash破壳漏洞,将可能导致远程攻击者操作系统来执行任意命令,威胁等级较高,那么我们要怎么知道Linux系统是否存在该漏洞,又该如何修复呢?下面随学习啦小编一起来了解下吧. 问 ...
- linux redis客户端怎么使用,linux 下安装redis并用QT写客户端程序进行连接
1.安装redis.使用如下命令: wget http://dowload.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd re ...
- 在Linux操作系统内安装PacketiX ××× Client (客户端)的步骤
在Linux操作系统内安装PacketiX ××× Client (客户端)的步骤 进入虚拟机linux5红帽版后,进行如下操作: 点击右键,选择"打开终端"进入命令行操作 进入命 ...
- Linux与云计算——第二阶段Linux服务器架设 第八章:FTP服务器架设—安装配置FTP服务和客户端配置...
Linux与云计算--第二阶段Linux服务器架设 第八章:FTP服务器架设-安装配置FTP服务和客户端配置 安装Vsftpd [1] 安装并配置Vsftpd. [root@server ~]# yu ...
- linux perl模块检测,Linux有问必答:如何用Perl检测Linux的发行版本
提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码.为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu.CentOS.Debian.Fedora等等),以及它 ...
最新文章
- android获取设备唯一标识_数据埋点:用户唯一标识
- SLB vs CLB
- 关于精益和敏捷的对话
- linux fedora35安装deepin-wine:deepin-wine-on-fedora项目
- 2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO
- 项目优化经验——垃圾回收导致的性能问题
- PAT (Basic Level) Practise:1013. 数素数
- 使用JavaMail技术发送邮件
- gerber文件_90%的工程师容易忽视(一):PCB输出gerber文件,这样操作才正确
- 2021牛客寒假算法基础集训营6,签到题ACDFGIJ
- hpuoj--校赛--特殊的比赛日期(素数判断+模拟)
- [uva11235]Frequent values(RMQ,ST,离散化)
- Two Sum(C、C++、Python)
- SimpleLPR车牌自动识别,一张图片就可识别
- C/C++ Linux 异步IO(AIO)
- 如何用pe备份linux系统盘,使用轻松备份创建可启动光盘或U盘
- 智能蓝牙技术原理及设计方案集锦
- 基于c51的节日彩灯控制器的设计
- 扫雷(简易版) 10*10
- 【BZOJ4414】数量积
热门文章
- 韵乐x5效果器ktv最佳参数_家庭ktv(卡拉ok)家庭影院ktv选购推荐攻略
- IE11浏览器一个窗口打开多个页面设置方法
- js保存当前html,JavaScript保存当前页面
- php byte stringbuffer,重拾java基础(十三):String姐妹StringBuffer、StringBuilder总结
- esl证明函 oracle_强弱分明 Astralis证明之战—ESL科隆B组浅析
- 什么叫缺位_一位父亲能够给予孩子的最好礼物是什么?看看这部电影给出的答案...
- java整数翻转_Java程序反转数字
- 哲学家就餐问题python_哲学家就餐-同步问题解析-python
- go 字符串替换_Go语言爱好者周刊:第 64 期 — goup 这个工具了解下
- ajax请求php省略后缀,如何在PHP中更安全地处理Ajax请求?