TCP服务端能否主动让客户端连接?

inurlcn 2013-01-08 05:44:59
现在TCP服务端已经accept了客户端的connect

由于某些原因,服务端释放了此次连接

但是还想重新建立这个连接,有没有什么方法能通知客户端再来主动连接?

现在的情况是无法修改客户端的代码,只能从服务端入手。
服务端能保存当前的连接再恢复吗?
...全文
933 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sumos 2013-01-09
  • 打赏
  • 举报
回复
我感觉 lz这个需求 和 socket连接池 的概念很相似,但是这个 高深的socket连接池 就是不知道在哪儿。
氰客 2013-01-09
  • 打赏
  • 举报
回复
感觉不修改客服端是不能做到的吧。作为服务端是被动接受连接的吧。除非你客服端有accept才能反向发起连接。
wjb_yd 2013-01-09
  • 打赏
  • 举报
回复
楼主去看一下TCP三次握手,建立连接的过程,就会发现,你说的事情,不修改客户端,是不可能实现的。。。
zilaishuichina 2013-01-09
  • 打赏
  • 举报
回复
这个想法太前卫了 如果服务器能主动通知到客户端再连接上来, 那么这个通知的过程就已经建立了连接了, 如果客户端能收到服务器的通知的话,就不需要再去连服务器了 服务端主动连客户端, 那么需要客户端开启了监听端口,并告诉服务器这个端口号 服务端保存上次客户端连接时对应的ip和端口,这样才能主动连回去
hhyhw2001 2013-01-09
  • 打赏
  • 举报
回复
改用UDP吧
赵4老师 2013-01-09
  • 打赏
  • 举报
回复
引用 15 楼 zhao4zhong1 的回复:
税务局能否主动让纳税人纳税?
参考政府是怎么抓那些偷税漏税的不法分子的。
inurlcn 2013-01-09
  • 打赏
  • 举报
回复
引用 15 楼 zhao4zhong1 的回复:
税务局能否主动让纳税人纳税?
可不可以恢复TCP连接
赵4老师 2013-01-09
  • 打赏
  • 举报
回复
税务局能否主动让纳税人纳税?
zilaishuichina 2013-01-09
  • 打赏
  • 举报
回复
引用 13 楼 inurlcn 的回复:
引用 11 楼 zilaishuichina 的回复:引用 楼主 inurlcn 的回复:现在TCP服务端已经accept了客户端的connect 由于某些原因,服务端释放了此次连接 但是还想重新建立这个连接,有没有什么方法能通知客户端再来主动连接? 现在的情况是无法修改客户端的代码,只能从服务端入手。 服务端能保存当前的连接再恢复吗? 其实在……
心跳包是逻辑自己定的 服务器都重启了 那更没法恢复了 只能让客户端重连
inurlcn 2013-01-09
  • 打赏
  • 举报
回复
引用 11 楼 zilaishuichina 的回复:
引用 楼主 inurlcn 的回复:现在TCP服务端已经accept了客户端的connect 由于某些原因,服务端释放了此次连接 但是还想重新建立这个连接,有没有什么方法能通知客户端再来主动连接? 现在的情况是无法修改客户端的代码,只能从服务端入手。 服务端能保存当前的连接再恢复吗? 其实在这个问题上 有一点楼主需要说明的是 “由于某些原因,……
其实就是把服务端重启了下 这个“心跳包”的间隔是多少?
inurlcn 2013-01-09
  • 打赏
  • 举报
回复
引用 9 楼 zilaishuichina 的回复:
引用 7 楼 inurlcn 的回复:引用 2 楼 wjb_yd 的回复:楼主去看一下TCP三次握手,建立连接的过程,就会发现,你说的事情,不修改客户端,是不可能实现的。。。 是不是不给客户端发送 FIN ,客户端就不知道当前连接已经断开了? (可能还有其他的判断标准) 把当前服务端TCP连接信息给存起来, 不就可以恢复了 lz要知道 socket端口号是复用的……
我这SOCKER和PORT是绑定的
zilaishuichina 2013-01-09
  • 打赏
  • 举报
回复
引用 楼主 inurlcn 的回复:
现在TCP服务端已经accept了客户端的connect 由于某些原因,服务端释放了此次连接 但是还想重新建立这个连接,有没有什么方法能通知客户端再来主动连接? 现在的情况是无法修改客户端的代码,只能从服务端入手。 服务端能保存当前的连接再恢复吗?
其实在这个问题上 有一点楼主需要说明的是 “由于某些原因,服务端释放了此次连接” 此时服务端有没有close(socket) 客户端有没有类似心跳包的检查,发现连接断掉之后也close(socket) 楼主所说的“释放”到底是free了内存,还是close了连接 如果两边都没有close,则连接依然是通的, 如果楼主在别的地方保存了free之前的socket信息,则可以恢复 任意一边close了则无法再回复,只能重新连接
小湿哥 2013-01-09
  • 打赏
  • 举报
回复
客户端不改,怎么行。。 有一个想法: 服务端 发一个UDP消息过去,客户端收到UDP,然后主动连服务端的TCP端口。。 0 0
zilaishuichina 2013-01-09
  • 打赏
  • 举报
回复
引用 7 楼 inurlcn 的回复:
引用 2 楼 wjb_yd 的回复:楼主去看一下TCP三次握手,建立连接的过程,就会发现,你说的事情,不修改客户端,是不可能实现的。。。 是不是不给客户端发送 FIN ,客户端就不知道当前连接已经断开了? (可能还有其他的判断标准) 把当前服务端TCP连接信息给存起来, 不就可以恢复了
lz要知道 socket端口号是复用的 A连接B 在B上会给A分配一个号 这就是socket 当你断掉一个连接之后 再有别的连接连上来 之前分配的这个号码是有可能重新分配给了新的连接的 所以你把TCP连接信息存起来是没有用的
九桔猫 2013-01-09
  • 打赏
  • 举报
回复
这玩法,其实是要在连接问题上完全控制客户端
inurlcn 2013-01-09
  • 打赏
  • 举报
回复
引用 2 楼 wjb_yd 的回复:
楼主去看一下TCP三次握手,建立连接的过程,就会发现,你说的事情,不修改客户端,是不可能实现的。。。
是不是不给客户端发送 FIN ,客户端就不知道当前连接已经断开了? (可能还有其他的判断标准) 把当前服务端TCP连接信息给存起来, 不就可以恢复了
Jonix 2013-01-09
  • 打赏
  • 举报
回复
可以让客户端也有服务端的被连功能,用于通知。 不一定TCP, 用 UDP,HTTP都可以。
翅膀又硬了 2013-01-09
  • 打赏
  • 举报
回复
改服务端呗,为什么客户端连上了,还给释放了呢?

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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