请教socket客户端怎么知道服务器端重启完成的?

nzc123 2009-12-03 08:07:50
我用SOCKET实现了手机和PC的通信。
手机是服务器端,但在运行过程中,手机端SOCKET服务需要重启,PC端客户端想在手机服务端重启完成之后,也重启本身(这样才能继续通信)。想问一下PC端怎么知道SOCKET服务器端已经重启完毕的?打算手机端服务重启之后发送消息到PC端,PC端重启SOCKET。但不知道怎么发送,或者怎么样才能让PC端知道服务器重启完成的? 谢谢。
...全文
490 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
red-fly 2009-12-05
  • 打赏
  • 举报
回复
在这种应用之下,只能这样来做。
你看QQ,你把网线拔掉,它就会不断地重连,因为它不知道什么时候服务器可以连上。
当然,如果是一个大的平台,如果还有另外的服务器,那可以和你的服务器配合来完成你想要的功能,但在你现在的情况下,显然是不切实际的,也没有必要
jourbin 2009-12-05
  • 打赏
  • 举报
回复
重新尝试连接服务器可以放在另外一个线程里,连接操作可以设置超时

还有什么更好的办法?那就只能改你的设计了
你的设计就很怪,需要重新启动,晕,这样的服务怎么投入商用?
人家最坏的情况还要做个冗于设计,一个服务器down了,另外一个还在提供服务
yinshisike 2009-12-05
  • 打赏
  • 举报
回复
我也想知道.
joey_ 2009-12-05
  • 打赏
  • 举报
回复
绕人的问题
red-fly 2009-12-04
  • 打赏
  • 举报
回复
1. 楼主的思想不对。不是要重启才能继续通信。要是这样,那就是程序有问题
2. PC端无法知道服务器是否已经启动完成,除非另有约定。PC端发现无法和服务器通信之后,开始复位所有的状态,然后进入到一个不断重试连接的过程,直到重新连接成功或者是达到指定的重连次数后停止
3. 重启约定。此约定是在保证硬件连接完好的前提下进行的。当服务器端开始重启时,首先向客户端发送重启需要的时间,然后客户端复位所有的状态,在等待指定的时间后开始重连,或者是直接约定比如15秒钟等等,这个约定的时间,应该是经过测试后服务器重启所需要的时间,而不是随便指定一个时间的。
nzc123 2009-12-04
  • 打赏
  • 举报
回复
不懂,
不过,既然服务端都重启了,那么socket链接也就断了,客户端如何能获得服务端的数据呢。
为什么不考虑pc端断开重连,而非重启软件。
------------
你好,我就是用PC端断开SOCKET重联的。但需要知道服务器端什么时候重启成功,因为不断的重联的话,消耗太大了。

------------------------------
确切的说,无法精确地知道;
不过有个方法,你在手机重启时告诉PC,然后PC在一定的时间(时间足以让手机重启,就算没有重启完成,pc可以不停尝试重连直至连接成功)后重连。
--------------------------------
你好,这种办法我也想到,不过不知道服务器端重启时间的话,PC端会浪费很多时间等待。


断开连接的时候会有抛出异常的吧,截获这个异常就可以了,然后不断地去重连服务器,直到成功为止。
或者在连接的过程中,定时发送活跃信息(一个没有内容的数据包即可)。用另外的线程判定多久没有收到活跃信息,当在一定时间内收不到数据包的时候,判定掉线,然后关掉socket,然后不断重新连接,直到成功。
------------------------------------
你好,不断的重联服务器,消耗的资源太多啊。 你说的第2种办法只能检测到断开,不能检测到服务器重启成功。


不够具体理解lz意思
1,通信服务与业务逻辑服务分开,业务服务重启的时候,继续保持通信
2,如果是通信服务重启,在重启前通知PC端,然后PC端定时尝试连接服务器

TCP ? UDP ?能直连?
--------------------
TCP连接,不过PC端不断去重连服务器的话,消耗比较大。就跟我现在用的办法一样了。
nzc123 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jszj 的回复:]
1. 楼主的思想不对。不是要重启才能继续通信。要是这样,那就是程序有问题
2. PC端无法知道服务器是否已经启动完成,除非另有约定。PC端发现无法和服务器通信之后,开始复位所有的状态,然后进入到一个不断重试连接的过程,直到重新连接成功或者是达到指定的重连次数后停止
3. 重启约定。此约定是在保证硬件连接完好的前提下进行的。当服务器端开始重启时,首先向客户端发送重启需要的时间,然后客户端复位所有的状态,在等待指定的时间后开始重连,或者是直接约定比如15秒钟等等,这个约定的时间,应该是经过测试后服务器重启所需要的时间,而不是随便指定一个时间的。
[/Quote]
谢谢楼上的回复,我说的重启就是重连的意思。因为我的服务器需要执行一个操作之后才重启,这个操作的时间我无法预知。所以才想让服务器重启之后,通过另外一个渠道发消息给PC端,让PC端重连。如果不发的话,PC端会不断重连,直到超时或者连接成功,我现在是这么做的。但是觉得如果有另外一个渠道让服务器重启之后马上通知PC端的话,我就不用这么麻烦。
jourbin 2009-12-03
  • 打赏
  • 举报
回复
不够具体理解lz意思
1,通信服务与业务逻辑服务分开,业务服务重启的时候,继续保持通信
2,如果是通信服务重启,在重启前通知PC端,然后PC端定时尝试连接服务器

TCP ? UDP ?能直连?
nintendo_dskay 2009-12-03
  • 打赏
  • 举报
回复
断开连接的时候会有抛出异常的吧,截获这个异常就可以了,然后不断地去重连服务器,直到成功为止。
或者在连接的过程中,定时发送活跃信息(一个没有内容的数据包即可)。用另外的线程判定多久没有收到活跃信息,当在一定时间内收不到数据包的时候,判定掉线,然后关掉socket,然后不断重新连接,直到成功。
jenf 2009-12-03
  • 打赏
  • 举报
回复
确切的说,无法精确地知道;
不过有个方法,你在手机重启时告诉PC,然后PC在一定的时间(时间足以让手机重启,就算没有重启完成,pc可以不停尝试重连直至连接成功)后重连。
悟迟 2009-12-03
  • 打赏
  • 举报
回复
不懂,
不过,既然服务端都重启了,那么socket链接也就断了,客户端如何能获得服务端的数据呢。
为什么不考虑pc端断开重连,而非重启软件。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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