客户端发送RST报文给服务端 --QTcpSocket 解决方案

该文 客户端发送RST报文的场景是 一个客户端只能向一台服务器发送TCP报文,即一个客户端只能连接一个服务器 并且是使用有线连接的方式的

问题描述

客户机10.1.37.99向服务器10.1.37.119:8000 发送数据 ,但是一段时间后客户端不给服务器发送TCP Keep-Alive ACK了??但是网络物理拓扑又是有线连接的方式,按道理是不存在网络环境很差的问题。 很懵????
在这里插入图片描述

方案一:通过错误和状态信号,进行重连操作 (未解决)

嘿~ 这时在谷歌上找到一个解决方案:
在这里插入图片描述
于是在TcpSocket中,建立两个信号与槽
在这里插入图片描述
呜~ 遗憾的是客户机发送RST报文时,并没有触发这两个信号??? 反正总之是槽函数中的打印函数没有输出不知道问什么 哭死

方案二:TCP选项之SO_LINGER (可恶 还是未解决)

这时又去找客户机为啥会发出RST报文,找到了个TCP选项之SO_LINGER

设置函数close()关闭TCP连接时的行为。缺省close()的行为是,如果有数据残留在socket发送缓冲区中则系统将继续发送这些数据给对方,等待被确认,然后返回。

l_onoff为0,则该选项关闭,l_linger的值被忽略,close()用上述缺省方式关闭连接。
在这里插入图片描述
结果输出:
l_onoff=0,l_linger=0。 那就不应该是缓冲数据未发完,导致异常结束的问题。 可恶 还是没有解决!!!
在这里插入图片描述
在这里插入图片描述

方案三:更换客户端的IP (yue了 解决)

再定睛一看,发现客户端10.1.37.99一直在向服务端2100端口发送SYN报文,服务端一直没有给客户端响应。
在这里插入图片描述

但是使用netstat命令 查看网络连接情况,主机服务端并没有2100端口被使用
客户机:
在这里插入图片描述
主机(服务端):
在这里插入图片描述
估计是IP冲突了,有人也在用内网的10.1.37.99!!! ,这时候换一个可用IP10.1.37.212,再用Wireshark侦听,就得到了纯净的网络信息了

在这里插入图片描述

至此,问题得到解决!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值