聊天室

36 篇文章 5 订阅
10 篇文章 0 订阅

实现一个基于udp协议的网络多人聊天室,可以完成多人的实时信息交互任务。其实就是类似于实现qq的群聊。

系统环境

Ubuntu 编辑器:vim 编译器:g++ 调试器:gdb 辅助编译工具:Makefile

原理图

首先说的是client:

client要完成的功能当然首先就是数据的接收和发送了(都从server接收和发送给server),其次,作为一个client,没有一个窗口界面都不好意思出来混,所以借助ncurse库的窗口函数来实现多窗口界面。因为要将一个终端界面划分为4个窗口:分别是提示窗口(显示应用名称),消息窗口(显示聊天消息),输入窗口(数据输入),好友列表(在线用户列表),然后需要用到多线程的技术,让这四个窗口各自刷新。同时,它们访问的资源显示器所谓临界资源,所以需要信号量来实现互斥访问机制。

其次说sever:

server当然也要接收来自client的消息,并给client发送消息。那么接收到的消息先放到哪呢?我是这样实现的。server维护一个后端数据池。将从client接收到的数据全部放入后端数据池中,然后从数据池中取出数据依次发给每一个在线好友(所以也要有记录在线好友的结构,我用了map,,存放好友的套接字信息)。当然还要实现在线好友的添加与删除,即client输入quit,clinet退出,server将该client从在线好友列表中删除。

最后:

server与client之间通信的数据包括:昵称,学校信息,消息内容,还有命令(用以实现退出),所以又借助了jsoncpp的序列化与反序列化的技术,实现底层传输的数据格式。

整个程序框架说的差不多了,说说具体的模块划分:

client模块:实现client底层通信

server模块:提供server底层通信

windows模块:基于ncurse库,提供client窗口模功能

data_pool模块: 提供server数据池

comm模块:基于jsoncpp,实现数据的序列化与反序列化功能

源代码

已托管到GitHub: https://github.com/Fireplusplus/Project/tree/master/ChatSystem

运行结果

界面难看的一塌糊涂,暂且将就着看吧=_=||         

顶部的提示窗口有滑动效果,字从左向右循环滚动。

         

         

当好友数量较多时,好友列表可以每隔几秒显示换一页显示。(由于这个博客写的有点晚,凑不齐当初的小组成员了,更找不到这么多人了,所以没办法展示这个效果了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fireplusplus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值