由于某些原因,服务端释放了此次连接
但是还想重新建立这个连接,有没有什么方法能通知客户端再来主动连接?
现在的情况是无法修改客户端的代码,只能从服务端入手。
服务端能保存当前的连接再恢复吗?
18 个解决方案
#1
这个想法太前卫了
如果服务器能主动通知到客户端再连接上来,
那么这个通知的过程就已经建立了连接了,
如果客户端能收到服务器的通知的话,就不需要再去连服务器了
服务端主动连客户端,
那么需要客户端开启了监听端口,并告诉服务器这个端口号
服务端保存上次客户端连接时对应的ip和端口,这样才能主动连回去
如果服务器能主动通知到客户端再连接上来,
那么这个通知的过程就已经建立了连接了,
如果客户端能收到服务器的通知的话,就不需要再去连服务器了
服务端主动连客户端,
那么需要客户端开启了监听端口,并告诉服务器这个端口号
服务端保存上次客户端连接时对应的ip和端口,这样才能主动连回去
#2
楼主去看一下TCP三次握手,建立连接的过程,就会发现,你说的事情,不修改客户端,是不可能实现的。。。
#3
感觉不修改客服端是不能做到的吧。作为服务端是被动接受连接的吧。除非你客服端有accept才能反向发起连接。
#4
我感觉 lz这个需求 和 socket连接池 的概念很相似,但是这个 高深的socket连接池 就是不知道在哪儿。
#5
改服务端呗,为什么客户端连上了,还给释放了呢?
#6
可以让客户端也有服务端的被连功能,用于通知。
不一定TCP,
用 UDP,HTTP都可以。
不一定TCP,
用 UDP,HTTP都可以。
#7
是不是不给客户端发送 FIN ,客户端就不知道当前连接已经断开了? (可能还有其他的判断标准)
把当前服务端TCP连接信息给存起来, 不就可以恢复了
#8
这玩法,其实是要在连接问题上完全控制客户端
#9
lz要知道 socket端口号是复用的
A连接B 在B上会给A分配一个号 这就是socket
当你断掉一个连接之后 再有别的连接连上来
之前分配的这个号码是有可能重新分配给了新的连接的
所以你把TCP连接信息存起来是没有用的
#10
客户端不改,怎么行。。
有一个想法: 服务端 发一个UDP消息过去,客户端收到UDP,然后主动连服务端的TCP端口。。 0 0
有一个想法: 服务端 发一个UDP消息过去,客户端收到UDP,然后主动连服务端的TCP端口。。 0 0
#11
其实在这个问题上 有一点楼主需要说明的是
“由于某些原因,服务端释放了此次连接”
此时服务端有没有close(socket)
客户端有没有类似心跳包的检查,发现连接断掉之后也close(socket)
楼主所说的“释放”到底是free了内存,还是close了连接
如果两边都没有close,则连接依然是通的,
如果楼主在别的地方保存了free之前的socket信息,则可以恢复
任意一边close了则无法再回复,只能重新连接
#12
我这SOCKER和PORT是绑定的
#13
其实就是把服务端重启了下
这个“心跳包”的间隔是多少?
#14
心跳包是逻辑自己定的
服务器都重启了 那更没法恢复了 只能让客户端重连
#15
税务局能否主动让纳税人纳税?
#16
可不可以恢复TCP连接
#17
参考*是怎么抓那些偷税漏税的不法分子的。
#18
改用UDP吧
#1
这个想法太前卫了
如果服务器能主动通知到客户端再连接上来,
那么这个通知的过程就已经建立了连接了,
如果客户端能收到服务器的通知的话,就不需要再去连服务器了
服务端主动连客户端,
那么需要客户端开启了监听端口,并告诉服务器这个端口号
服务端保存上次客户端连接时对应的ip和端口,这样才能主动连回去
如果服务器能主动通知到客户端再连接上来,
那么这个通知的过程就已经建立了连接了,
如果客户端能收到服务器的通知的话,就不需要再去连服务器了
服务端主动连客户端,
那么需要客户端开启了监听端口,并告诉服务器这个端口号
服务端保存上次客户端连接时对应的ip和端口,这样才能主动连回去
#2
楼主去看一下TCP三次握手,建立连接的过程,就会发现,你说的事情,不修改客户端,是不可能实现的。。。
#3
感觉不修改客服端是不能做到的吧。作为服务端是被动接受连接的吧。除非你客服端有accept才能反向发起连接。
#4
我感觉 lz这个需求 和 socket连接池 的概念很相似,但是这个 高深的socket连接池 就是不知道在哪儿。
#5
改服务端呗,为什么客户端连上了,还给释放了呢?
#6
可以让客户端也有服务端的被连功能,用于通知。
不一定TCP,
用 UDP,HTTP都可以。
不一定TCP,
用 UDP,HTTP都可以。
#7
是不是不给客户端发送 FIN ,客户端就不知道当前连接已经断开了? (可能还有其他的判断标准)
把当前服务端TCP连接信息给存起来, 不就可以恢复了
#8
这玩法,其实是要在连接问题上完全控制客户端
#9
lz要知道 socket端口号是复用的
A连接B 在B上会给A分配一个号 这就是socket
当你断掉一个连接之后 再有别的连接连上来
之前分配的这个号码是有可能重新分配给了新的连接的
所以你把TCP连接信息存起来是没有用的
#10
客户端不改,怎么行。。
有一个想法: 服务端 发一个UDP消息过去,客户端收到UDP,然后主动连服务端的TCP端口。。 0 0
有一个想法: 服务端 发一个UDP消息过去,客户端收到UDP,然后主动连服务端的TCP端口。。 0 0
#11
其实在这个问题上 有一点楼主需要说明的是
“由于某些原因,服务端释放了此次连接”
此时服务端有没有close(socket)
客户端有没有类似心跳包的检查,发现连接断掉之后也close(socket)
楼主所说的“释放”到底是free了内存,还是close了连接
如果两边都没有close,则连接依然是通的,
如果楼主在别的地方保存了free之前的socket信息,则可以恢复
任意一边close了则无法再回复,只能重新连接
#12
我这SOCKER和PORT是绑定的
#13
其实就是把服务端重启了下
这个“心跳包”的间隔是多少?
#14
心跳包是逻辑自己定的
服务器都重启了 那更没法恢复了 只能让客户端重连
#15
税务局能否主动让纳税人纳税?
#16
可不可以恢复TCP连接
#17
参考*是怎么抓那些偷税漏税的不法分子的。
#18
改用UDP吧