Linux下聊天室实现(基于C)

linux下基于TCP/IP协议的socket即时通讯

功能:
        1,群聊
        2,私聊
        3,禁言
        4,解除禁言
        5,群主设置
        6,群主解除管理员
        7,修改密码
        8,发送文件
        9,修改昵称
        10,查看在线人数
        11,踢人下线
        12,查看聊天记录
        13,忘记密码

代码都在这里,可以自行下载CSDN下载

链接好像有问题.......打不开就算了吧,这东西也不难

 

这里我讲下主要思路,因为我觉得思路比代码更重要。

 

服务器端监听,一旦有客户端连接便开辟一个新线程,另外将这个客服端的套接字插入服务器端的在线聊表,这个新开的线程专门与这个客户端通信,专门用来处理这个客户端发来的指令。

怎么实现群聊的呢?

客户端发送消息后,服务器收到来自客户端的消息(即发来的结构体)分析结构体中work指令来判断是群聊抑或是其他操作,假设现在群聊的work为1,当服务器端通过switch(work) case到work == 1后,便将结构体中的用来存放信息的字符串中的内容通过在线聊表(聊表中存放所有在线的客户端)发送给每一个在线的客户端,客户端收到来自服务器的信息也进行相似的操作——即判断结构体中的work,若是1(即群聊)则将存放信息的字符串打印出来。

那么私聊呢?

比如说A被禁言了,在服务器端本地的数据库(我使用的是sqlite3)中其对应的账号信息中是否禁言这个字段便会被置为1(默认为0),在每次A发送群聊消息后服务器都会先检查其是否禁言的flag是否为1,若不是才会将信息通过在线聊表发往每个客户端,若不是则通知A你被禁言了。

至于群主和管理员

群主是我设置的一个系统账号吧,在最开始建数据库时便由客户端代码执行插入的账号,其在数据库中root字段为1(默认为0),其实后续的就是判断其数据库中的root就行了,然后就可以进行相应的指令控制。

 

 

你可能感兴趣的:(项目,C/C++)