当前位置:  技术问答>linux和unix

tcp连接中服务器如何知道客户端退出

    来源: 互联网  发布时间:2015-07-25

    本文导语:  TCP是有连接的,所以不需要自己编写代码维持连接通道,但客户端正常或异常退出时,服务端如何知道?TCP协议中不是说关闭有几个握手吗?是不是需要在服务端调用这个握手?如何调用? | ...

TCP是有连接的,所以不需要自己编写代码维持连接通道,但客户端正常或异常退出时,服务端如何知道?TCP协议中不是说关闭有几个握手吗?是不是需要在服务端调用这个握手?如何调用?

|
正常地断开tcp连接才有握手过程。
但在异常地状况下,如客户端突然断电等,
服务器是无法得知客户端断开。
因此很多异常状况下服务器/客户端只有自己检测对方是否异常中止。
方法有很多,
比如server阻塞于read调用,而client没有连接情况下
经过一段时间会返回ETIMEDOUT,和ehostunreach等错误,
具体的错误要看TCP连接的异常状况

|
如ExitWin(ExitWin)所说,自定义链路检测包是个可以方便控制的方法。
比如
3分钟没有数据传输,即触发链路检测,
1次:未接收到响应包,1分钟后重发;
2次:未接收到响应包,1分钟后重发;
3次:未接收到响应包,1分钟后重发;
确认连接丢失,断开当前连接,尝试重连。

|
SO_KEEPALIVE
该选项可以在socket长时间没有数据发送接收的情况下发送特别的包以确定对方存在
但是需要的时间比较长,通常用在服务器上,发3次,一次间隔比一次长,3次没有响应则认为对方已经不存在,这时候读操作将立即返回告知对方已关闭
所需的时间大概是1-2小时(因此不适合想立即知道的情况)

|
Try to read/write the socket and check if the result is less than 0.

|
在不发送数据包检测的情况下
还可以通过 SOCKET选项来实现
如给套接口设定SO_KEEPALIVE

|
自己定义一个心跳来监控客户端就可以了

|
一个简单的办法,你可以设置超时。

    
 
 

您可能感兴趣的文章:

  • 大侠,求助!!LINUX下TCP套接字编程中客户端出现段错误
  • 使用tcp协议发送数据, 如果获得系统底层将包发到客户端之间的耗时?
  • TCP 服务器端关闭客户端句柄问题
  • tcp/ip 服务端响应linux客户端问题
  • 求救:基于TCP的服务/客户端程序
  • TCP:客户端连接服务器出错
  • 在linux下面,为什么TCP服务器端在客户端没有断开前推出程序会关不掉socket?
  • tcp socket客户端和服务端示例分享 iis7站长之家
  • 请问tcp 客户服务器模型(C/S模型)客户端两个send如果发送间隔太短,服务器端为什么会认为受到的只是一个包
  • TCP服务端程序意外重启后,客户端连接不上的问题求解
  • linux下socket tcp客户端读取数据
  • 哪位给看一下 为什么连接失败 errno=111 connect 调用失败(这是客户端已tcp方式连接)
  • 请教做过将linux移植到arm9上的大虾,在pc的linux下成功的tcp客户端代码交叉编译后,通过网线下到目标板就无法连接到pc上的服务器端了。
  • tcp socket客户端和服务端示例分享
  • vc++实现的tcp socket客户端和服务端示例
  • 嵌入式linux下,TCP的客户端无法连接到服务器(硬件没问题),请帮忙看看!谢谢
  • 使用TCP,在客户端怎么知道建立好的连接已经断开?怎么用非阻塞模式,以及怎么知道socket已经收到数据并立即将数据读出?
  • 对socket使用select(max_fd,&rd_set,&wr_set,&er_set,&timeout);当服务端断开TCP连接,客户端就会崩溃。怎么解决?谢谢
  • 一个TCP文件传输程序,客户端老连不上,大家帮我看看哪错了
  • Android TCP 文件客户端与服务器DEMO介绍
  • TCP程序非正常退出
  • linux TCP通信程序 本地进程被对方强制退出
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问怎么知道每个TCP连接所属哪个进程??还有怎么样断开系统中任意一个TCP连接?
  • 转发 TCP/IP 连接 prtunnel
  • tcp连接数的限制
  • 请问在linux上tcp能够接收的最大连接数是多少?
  • 跟相同IP,端口不同的TCP服务端连接问题
  • tcp连接未断开,发送失败?
  • linux下TCP连接进行容错怎么实现的
  • TCP/IP 连接诊断工具 Why Can't I Connect?
  • 载断TCP UDP连接
  • 高可用集群系统中tcp连接容错
  • Linux如何关闭一个TCP连接
  • 如何在redhat系统中手动断开一个TCP连接
  • tcp连接的问题,达人请进
  • 在Linux下同时使用5000个TCP连接的问题
  • linux下如何操作已经存在的TCP连接
  • tcp的最大连接数?
  • 问一个TCP连接终接的问题
  • red hat 怎么修改tcp连接数
  • LINUX C 进行TCP网络连接,怎样设置连接超时时间?
  • TCP连接中创建的监听描述字和已连接描述字(套接字)对应的是同一个套接口么,如果是的话,读写数据时系统怎么区分是哪个套接字的?
  • java命名空间java.net接口socketoptions的类成员方法: tcp_nodelay定义及介绍
  • http走的是tcp还是udp?ssh是tcp还是udp?
  • Linux内核中影响tcp三次握手的一些协议配置
  • 100分求《嵌入式系统Web服务器—TCP/IP Lean》或《TCP/IP Lean Web Servers for Embedded Systems 》
  • TCP协议报头字段详解及报头图
  • tcp和udp套接字有何不同?在什么情况下用tcp什么情况下用udp????
  • 对TCP协议状态及状态转换理解
  • tcp_prequeue_process怎么调用了tcp_v4_do_rcv的??求解??在tcp_recvmsg调用的
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 求助!!!linux tcp发送 xp tcp接收 出现的问题
  • TCP协议三次握手过程详解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3