socket通信,关于C/S模式的问题。

baozi429 2008-02-25 04:59:58
老师让我们做一个局域网聊天工具,基于SOCKET,UDP协议,采用C/S模式。其他没特殊要求,第一个人启动时,作为SERVER端,其他人启动时,默认作为客户端(当然,你也可以新建,作为SERVER端)。
主要要求是,当第一个启动的人A(即SERVER)要下线了,则通知或者说与某台机器B(client)协商,让它来作为server,并且通知其他的CLIENT(C D E)新的SERVER为B。这一切换过程能否实现,实现函数是什么,切换过程中,其他机器是不是会出现短暂的掉线现象。
对socket 不太了解,看了好多,但是他们好像都是采用固定的S端。
希望大家能详细的给分析一下。不甚感谢!
...全文
197 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
truelie007 2008-02-27
  • 打赏
  • 举报
回复
同意楼上的观点,不过里面有个问题,如何确定B是处于active状态?应该是在A下线发一个广播,然后,处于active的client同时向A响应,A将第一个收到的信息对应的client作为server,然后通知所有人,然后A下线。
buzhihuigai 2008-02-27
  • 打赏
  • 举报
回复
直接在定server的时候,定一个次要server,如果主server连不上,大家都连次server不久可以了
tiger456 2008-02-27
  • 打赏
  • 举报
回复
我还有个疑问:
如果服务器突然中断,使用一个客户端顶上.假设服务器有个"验证用户"的功能,或者"保存聊天记录"的功能,
这样的话,是不是要所有的客户机同步更新和保存,以使任意一台客户机暂当服务器?(也许资料数据庞大,也许类似用户密码这样的文件可能不太安全对外发布吧)
这个时候该怎么办啊?
losky 2008-02-27
  • 打赏
  • 举报
回复
假设程序在局域网运行
当一个客户端A启动时,首先广播告诉服务器A上线了,如果服务器已经存在,发送A一个确认包
假如服务器存在:把A加入客户列表,把服务器地址发给A,然后把更新的客户列表多播给所有客户。
假如服务器不存在:A自已启动服务,做服务器。

这样客户端都可以服务端,有所有客户的列表,与他们上线的时间。
利用心跳包来确认服务器是否存在
如果发现服务器不存在(器务器关闭或意外事故),时间最早的客户端就启动自已的服务,然后告诉所有客户端:服务器更换了。
baozi429 2008-02-27
  • 打赏
  • 举报
回复
tiger456说的是主要问题。
baozi429 2008-02-27
  • 打赏
  • 举报
回复
tiger456说的是主要问题。
tiger456 2008-02-27
  • 打赏
  • 举报
回复
如果Server A突然断电或某些原因引起的崩溃,
那该怎么保证网络的联通呢?
dream19861009 2008-02-25
  • 打赏
  • 举报
回复
楼上的我们的意思是一样的,呵呵 ,不过我发的时候还没看到你回呢
dream19861009 2008-02-25
  • 打赏
  • 举报
回复
这个应该可以实现,因为你只要在A下线之前就通知所有人 B将成为server,确认所有人都知道B是server后,然后A 在下线就可以了 啊
oo 2008-02-25
  • 打赏
  • 举报
回复
切换过程就是重新建一个连接,只要所有client都重新连到新的server后,老的server再退出,不会有断线的现象。

64,661

社区成员

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

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