支持并发的多人聊天程序

 下载链接

http://clearriver.download.csdn.net/

http://download.csdn.net/source/1816684

注:这是师弟妹们的一么课程的大作业,我就为了练练手来做的,时间比较仓促,里面有很多粗鲁的实现:

(1)       一些信号没有做处理

(2)       一些同步没有做

(3)       一些异常没有处理(比如说用户等输入不合理)

(4)       ……

估计处理这些问题还需要一倍的代码量,就没有做了。希望不要拍的太厉害,呵呵 ~~~

1.         多人聊天程序功能

1)       支持用户并发请求(注册,登录,聊天)

2)       当用户登录时,应该提示其所有在线好友“自己已经在线”

3)       当用户退出时,应该提示其所有在线好友“自己已经下线”

4)       用户登录时除需要返回登录成功 / 失败信息,还要获取当前自己所有在线好友信息(好友谁在线?)

5)       添加好友(需验证?)

6)       删除好友(目前没有做,只要添加一个函数就可以了)

2.         服务器端实现

(1)       fork 方式处理用户请求

a)         每个用户的注册和登录用一个子进程来处理

b)         为每一个新注册用户产生一个唯一 ID (在文件中保存当前 ID+1 ,作为下一个 ID

c)         父进程维护一个所有在线用户的链表,子进程通过消息队列和父进程通信,获取其他在线用户信息,父进程有一个“ well-known ”的消息队列描述符,由“ server ”文件产生关键字获得

d)         每个用户有一个以其 ID 命名的文件“ user_id ”文件,该文件保存该用户的好友信息

e)         每个子进程(对应一个在线用户)维护一个在线好友的列表(数组或链表)

f)          用户之间通信子进程之间通过消息队列相互通信,消息队列描述符由“ user_id ”文件产生关键字获得

g)         假设注册和登录时并行的请求,其他请求(添加好友,聊天)都基于登录后进行。

h)         不同请求的状态机可以通过函数指针数组或者“ switch-case ”实现

3.         客户端实现

由于客户端和服务器所有的通信都是基于“头字段解析”的,所以需要定义一个简单的通信协议,协议格式如下:

消息类型( char

ID long

目的 ID long

其他

用户端通过 IO 复用方式接受用户的输入和服务器端的返回,并维护相应的两个状态机。

         状态机 1 :接受服务器端的返回,通过函数指针数组实现

         状态机 2 :接受用户输入,通过 ”switch-case” 实现

4 ,关于消息类型的说明

在服务器和客户端都定义了大量的消息类型宏定义,看到名字就应该知道是什么意思。

其中有几个需要解释一下:

服务器端:

ON_LINE1 :当用户登录时,通过向服务器查询自己的当前在线好友“我的朋友都是谁在线?”,返回客户端。

ON_LINE2 :当一个用户登录时,告诉自己的所有在线好友“朋友们,我已经上线了”

客户端:

对应于服务器端的 ON_LINE1 ON_LINE2 ,客户端的的 SERV_FND_ON1 SERV_FND_ON2 同样是处理两种不同的“在线信息”。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值