Server端网卡Down之后,由Client端向Server端发送断连消息,从Client端可以看到端口状态变成了FIN_WAIT1这个时候去Client上抓包,出现了两种情况:
1 Server网卡一直不UP,那么Client上端口在FIN_WAIT1一段时候后关闭,Client上也抓不到重传报文
2 在一定时间内Server网卡UP, 那么可以在Client上抓到TCP重传的包,Server端自然能接收到该包并且正常处理了
这个问题是在公司业务上碰到的,客户端登录server后,server将网卡断开后,在客户端进行与server的断开连接,同时将server的网卡up,并且立马重新连接server,这个时候,server上受到的报文是登录-登出,按操作步骤我们想要的结果是登出-登录,或者直接那个登出报文不要也可以的,小女子在此跪求各位大神出手相助
这个接收到的报文顺序不可控,你们应该从应用层等来判断这个逻辑。进行处理
看到一个博主对于缓冲区的解释:
这些I/O缓冲区特性可整理如下:
I/O缓冲区在每个TCP套接字中单独存在;
I/O缓冲区在创建套接字时自动生成;
即使关闭套接字也会继续传送输出缓冲区中遗留的数据;
关闭套接字将丢失输入缓冲区中的数据。
所以也就是说我需要解决的问题是关闭Socket之后将输出缓冲区清理掉就能阻止登出报文的发送了?
关闭Socket之后将输出缓冲区清理掉就能阻止登出报文的发送了
缓存区都为空了,当然没有数据可传了。。