TCP连接管理中的保活机制(防止服务器端关闭客户端发送信息导致程序崩溃)

目录

1.应用场景

2.代码

3.结果


1.应用场景

服务器和客户端启动以后(./tcp_srv.cpp ./tcp_cli.cpp 192.168.164.128 20000),服务器端关闭,此时客户端向服务器端发送数据,需要防止程序崩溃。

2.代码

客户端代码:

#include "tcp_socket.hpp"
#include<signal.h>


//tcp连接管理中的保活机制
void sigcb(int signo)
{
 printf("recv signo:%d\n",signo);
}

int main(int argc,char* argv[])
{
  if(argc!= 3)
  {
    std::cout<<"please input server address!\n";
    std::cout<<"USsage:./tcp_cli 192.168.164.128 20000\n";
    return -1;
  }
 signal(SIGPIPE,sigcb);
 std::string srv_ip = argv[1];
 uint16_t srv_port = std::stoi(argv[2]);
 TcpSocket cli_sock;
 //创建套接字
   CHECK_RES(cli_sock.Socket());
 //绑定地址信息(客户端不推荐)
 //向服务器发起连接
   CHECK_RES(cli_sock.Connect(srv_ip,srv_port));
   while(1)
   {
     //与服务器通信
     std::string buf;
     std::cout<<"client say:";
     fflush(stdout);
     std::cin>>buf;
     bool ret = cli_sock.Send(buf);
    if(ret == false)
    {
     cli_sock.Close();
     return -1;
    }
  
  /*
    buf.clear();
    ret = cli_sock.Recv(&buf);
    if(ret == false)
    {
     cli_sock.Close();
     return -1;
    }
    std::cout<<"server say:"<<buf<<std::endl;
  
 */
  }
 //关闭套接字
  cli_sock.Close();
  return 0;
 }
   
  

文件结构如图所示:除了tcp_cli.cpp,其他代码见博客:http://(70条消息) TCP 用setsockopt()设置等待时间,减少主动关闭方所处TIME_WAIT的时间_WJ8871的博客-CSDN博客 https://blog.csdn.net/weixin_46153828/article/details/126531466

3.结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值