linux 开发 socket 假连接的问题

teachin88 2015-11-10 09:29:13
本来 服务器 -- 客户端 通过 socket 连接 正常。

然后, 服务器 重启了一下。 客户端 和 服务器 有心跳检测,检测到失联,客户端 会 重新 close socket -- create socket -- connect

但有时候会发生这样的情况(但并不是每次都这样):

客户端 connect 返回 成功 , 然后 实际发送数据 会失败。 然后 心跳检测到 失联, 又 connect, 但实际发送又失败。。。

也就是 connect 表面上能连接上,但实际上并没有 正常 地 连接。


请大侠们说说这是为什么。谢谢!

...全文
478 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
泽坤 2015-12-04
  • 打赏
  • 举报
回复
是这样的,刚开始连接正常; 重启服务器的时候发生了如下事件: 1.服务端程序关闭 2.系统在服务端程序关闭的时候,关闭了此Socket连接的文件描述符fd; 3.在关闭文件描述符fd的时候,服务器会向客户端发送一个FIN; 4.客户端接收到FIN之后,会返回ACK,但是这时客户端只知道是服务端关闭了Socket连接的写入部分,并不知道服务器的程序挂掉了。所以仍然会向服务端发送正常的数据; 5.这时候你重启了服务器,又重连成功,可能client端并没有刷新Socket连接,在内核中的记录仍然是服务器关闭了Soket的写入部分;在服务端由于你的重连,服务端看见的Socket就是可读可写的Socket;所以服务端能收到客户端发送的消息,但是客户端确不会接收服务端发送的数据; 从另一个角度看客户端在接收FIN之后,客户端的TCP在内核的状态已经是CLOSE_WAIT了,应该就不会再接收数据了。 以上是我的猜测,没有看到你程序执行的具体过程;不过你可以使用netstat -ntp 在客户端和服务器各个操作阶段。查看你的TCP的状态,应该就可以看的出来。
nswcfd 2015-12-04
  • 打赏
  • 举报
回复
1. “检测到失联”的逻辑是什么?几秒内没有read or write?还是select返回exception? 2. 重连是指什么?重新发起connect调用?新的socket还是老的socket?
nswcfd 2015-12-04
  • 打赏
  • 举报
回复
3. tcp or udp?
fxbszj 2015-11-27
  • 打赏
  • 举报
回复
On success, these calls return the number of characters sent. On error, -1 is returned, and errno is set appropriately. 客户端没有收到数据,怎么可能返回值正常
teachin88 2015-11-26
  • 打赏
  • 举报
回复
引用 2 楼 csdn_vieri 的回复:
发送失败,错误码是什么,先检查一下。
我可能没有说清楚,具体是这样: 1: 刚开始 服务器 --- 客户端 正常连接; 2: 服务器 重启。 客户端检测到 失联,socket 重连, 重连 成功。 3: 客户端 send 数据 给 服务器, send 返回值正常。 服务器也能正常接收数据。 4: 服务器 send 数据给 客户端, send 返回值正常。 客户端 并没有收到数据。 5: 此时客户端 重启后, socket 连接上 服务器, 就一切正常。 但 以上描述的 假连接现象 不是 每次 服务器 重启后都会发生。很多时候 重连 也是能正常收发数据的。
csdn_vieri 2015-11-12
  • 打赏
  • 举报
回复
发送失败,错误码是什么,先检查一下。
teachin88 2015-11-11
  • 打赏
  • 举报
回复
自己顶一下!
内容概要:本文围绕“基于共享储能服务的智能楼宇双层优化配置”展开研究,提出了一种结合上层共享储能配置优化与下层楼宇内部能源调度优化的双层协同模型,通过Matlab代码实现,旨在提升智能楼宇在复杂能源环境下的运行效率与经济性。研究充分考虑光伏出力、负荷需求等不确定性因素,引入多维核密度估计、场景生成与削减等技术进行不确定性建模,并融合需求响应、微电网调度等先进理念,实现了对综合能源系统中储能资源的高效配置与动态调控,具有较强的理论深度与工程应用价值。; 适合人群:具备电力系统、可再生能源、优化算法或综合能源系统等相关背景,从事科研、工程应用或课题研究的研发人员、研究生及高年级本科生。; 使用场景及目标:①应用于智能楼宇、园区微电网、虚拟电厂等场景中的储能规划与运行优化;②支撑高水平学术论文(如EI/SCI)的复现、课题申报、毕业设计及实际项目的双层优化建模与求解实践。; 阅读建议:建议结合提供的Matlab代码进行实操演练,重点理解双层优化架构的设计逻辑、求解策略(如Benders分解、主从博弈等)及不确定性处理方法,同时可参考文中关联技术(如场景生成、需求响应)拓展研究思路与应用场景。

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧