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

#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相关推荐

  1. linux msgrcv阻塞接收_linux下高并发服务器实现

    在做网络服务的时候tcp并发服务端程序的编写必不可少.tcp并发通常有几种固定的设计模式套路,他们各有优点,也各有应用之处.下面就简单的讨论下这几种模式的差异: 单进程,单线程 在accept之后,就 ...

  2. g++ linux 编译开栈_Linux下编写C++服务器(配置C++编译调试环境)

    Linux下编写C++服务器(配置C++编译调试环境) 安装好linux虚拟机,确定能上网后,我们可以开始编写C++程序了,但在这之前我们需要下载编译器和调试器 下载gcc 1.在终端输入yum se ...

  3. 专门入侵检测linux叫什么,入侵检测系统分析及其在Linux下的实现(上)

    一.入侵检测系统分析 1.1 什么是入侵检测系统 所谓入侵,是指任何试图危及计算机资源的完整性.机密性或可用性的行为.而入侵检测,顾名思义,便是对入侵行为的发觉.它通过从计算机网络或系统中的若干关键点 ...

  4. Linux下内存检测工具:asan

    Linux下内存检测工具:asan ASAN(Address-Sanitizier)早先是LLVM中的特性,后被加入GCC 4.8,在GCC 4.9后加入对ARM平台的支持.因此GCC 4.8以上版本 ...

  5. 修复linux bash破壳漏洞,Linux下bash破壳漏洞检测及修复的方法

    如果Linux服务器存在bash破壳漏洞,将可能导致远程攻击者操作系统来执行任意命令,威胁等级较高,我想要知道我的Linux服务器是否存在bash破壳漏洞,以及如何来保护我的Linux服务器不受破壳漏 ...

  6. linux系统漏洞测试过程,Linux下bash破壳漏洞检测方法

    如果Linux服务器存在bash破壳漏洞,将可能导致远程攻击者操作系统来执行任意命令,威胁等级较高,那么我们要怎么知道Linux系统是否存在该漏洞,又该如何修复呢?下面随学习啦小编一起来了解下吧. 问 ...

  7. linux redis客户端怎么使用,linux 下安装redis并用QT写客户端程序进行连接

    1.安装redis.使用如下命令: wget http://dowload.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd re ...

  8. 在Linux操作系统内安装PacketiX ××× Client (客户端)的步骤

    在Linux操作系统内安装PacketiX ××× Client (客户端)的步骤 进入虚拟机linux5红帽版后,进行如下操作: 点击右键,选择"打开终端"进入命令行操作 进入命 ...

  9. Linux与云计算——第二阶段Linux服务器架设 第八章:FTP服务器架设—安装配置FTP服务和客户端配置...

    Linux与云计算--第二阶段Linux服务器架设 第八章:FTP服务器架设-安装配置FTP服务和客户端配置 安装Vsftpd [1] 安装并配置Vsftpd. [root@server ~]# yu ...

  10. linux perl模块检测,Linux有问必答:如何用Perl检测Linux的发行版本

    提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码.为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu.CentOS.Debian.Fedora等等),以及它 ...

最新文章

  1. android获取设备唯一标识_数据埋点:用户唯一标识
  2. SLB vs CLB
  3. 关于精益和敏捷的对话
  4. linux fedora35安装deepin-wine:deepin-wine-on-fedora项目
  5. 2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO
  6. 项目优化经验——垃圾回收导致的性能问题
  7. PAT (Basic Level) Practise:1013. 数素数
  8. 使用JavaMail技术发送邮件
  9. gerber文件_90%的工程师容易忽视(一):PCB输出gerber文件,这样操作才正确
  10. 2021牛客寒假算法基础集训营6,签到题ACDFGIJ
  11. hpuoj--校赛--特殊的比赛日期(素数判断+模拟)
  12. [uva11235]Frequent values(RMQ,ST,离散化)
  13. Two Sum(C、C++、Python)
  14. SimpleLPR车牌自动识别,一张图片就可识别
  15. C/C++ Linux 异步IO(AIO)
  16. 如何用pe备份linux系统盘,使用轻松备份创建可启动光盘或U盘
  17. 智能蓝牙技术原理及设计方案集锦
  18. 基于c51的节日彩灯控制器的设计
  19. 扫雷(简易版) 10*10
  20. 【BZOJ4414】数量积

热门文章

  1. 韵乐x5效果器ktv最佳参数_家庭ktv(卡拉ok)家庭影院ktv选购推荐攻略
  2. IE11浏览器一个窗口打开多个页面设置方法
  3. js保存当前html,JavaScript保存当前页面
  4. php byte stringbuffer,重拾java基础(十三):String姐妹StringBuffer、StringBuilder总结
  5. esl证明函 oracle_强弱分明 Astralis证明之战—ESL科隆B组浅析
  6. 什么叫缺位_一位父亲能够给予孩子的最好礼物是什么?看看这部电影给出的答案...
  7. java整数翻转_Java程序反转数字
  8. 哲学家就餐问题python_哲学家就餐-同步问题解析-python
  9. go 字符串替换_Go语言爱好者周刊:第 64 期 — goup 这个工具了解下
  10. ajax请求php省略后缀,如何在PHP中更安全地处理Ajax请求?