MST

星途 面试题库

面试题:网络编程之TCP协议Socket通信中等难度题

在基于TCP协议的Socket通信中,服务端和客户端建立连接后,如果客户端突然断开连接,服务端如何检测到这种情况?请描述至少两种检测机制及其实现原理。
27.4万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试
  1. 心跳机制
    • 原理:客户端和服务端定期互相发送心跳包(简单的特定格式数据)。服务端在设定时间内若未收到客户端的心跳包,则判定客户端断开连接。例如,客户端每10秒向服务端发送一个心跳包“heartbeat”,服务端开启一个定时器,若超过10秒未收到该心跳包,触发相应处理。
    • 实现:在服务端代码中,利用定时器(如Python中的threading.Timerasynciocall_later等)设置检测时间间隔,每次收到心跳包时重置定时器。客户端则按固定间隔发送心跳包,如在Python中使用socket.send(b'heartbeat')发送。
  2. TCP Keepalive机制
    • 原理:TCP协议自身提供的一种检测机制。当连接在一段时间内没有数据传输时,TCP会自动向对方发送探测包。若多次发送探测包后未收到响应,TCP会认为连接已断开。不同操作系统对该机制的默认参数设置不同,如Linux默认2小时无数据传输开始发送探测包。
    • 实现:在服务端代码中开启该机制,如在Python中通过socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)开启。还可进一步设置相关参数,如TCP_KEEPIDLE(多久开始发送探测包)、TCP_KEEPINTVL(探测包发送间隔)和TCP_KEEPCNT(探测次数)等。在C语言中,可通过setsockopt函数对相应套接字选项进行设置。