项目:聊天室思路(linux下实现,语言:C/C++)

先来沾上我的源码:https://github.com/zhangyi-13572252156/ChatRoom.git

聊天室项目

  • 我从以下几个点来介绍

项目原理

  • 项目主要分为两端,客户端和服务端。
    项目:聊天室思路(linux下实现,语言:C/C++)_第1张图片
  • 从上图我们可以看出,这表示的是刚开始的客户端的注册和登录状态。上图已经很清楚的显示出来了。
    项目:聊天室思路(linux下实现,语言:C/C++)_第2张图片
  • 那么我们从上图再来看,采用多线程,服务端我们有登录和注册这条主线程,还有从数据库中拿数据的一条线程,还有一条往数据库中放数据的一条线程。那么这两条线程势必会遇到对同一数据块的操作,因此我们采用生产者-消费者模型。使两条线程可以正常的运作。

项目实现功能

  • 实现了基本的群聊功能,显示发送人、时间、内容等消息
  • 实现了基本的私聊功能,双方在聊天室外单独通信
  • 实现了管理员权限,管理员可以对聊天室成员禁言、踢人、设置管理员等
  • 实现了找回账号找回密码,通过验证注册时的个人设置的密保问题和答案
  • 实现了保存聊天室中的聊天记录以及保存服务器的日志
  • 实现了双方发送和接收文件操作

感受

  • 写一个项目前,一定要有一个框架,把自己的思路架构出来。要有一个大的思维导图,这样自己在做每一步的时候很清楚的知道自己在干什么。
  • 前期的时候犯得一个最大的错误就是没有整体的意识,写到那就是那,全凭脑子想。做了两天后,发现当初的规划不好,于是重新规划。在A3纸上画一个大图,告诉自己需要做哪些工作。以及服务端和客户端要干的事情。再往后写,就简单了很多。
  • 由于前期的架构做的比较好,到后期,项目越写越简单。加功能等等都是特别容易的事情。主要前期有一个规划和一个整齐的框架。不要先着急写代码。代码写起来特别简单。
  • 关于技术方面的问题,那些都不是什么难事情。遇到问题网上的资料很多,也可以问身边的技术大牛。虽然过程中也遇到很多问题。
  • 还是举一个简单的技术方面的问题吧。在创建线程的回调函数中,当初学习的时候,仿照书上的写法。直接将void*强转为int型。但是这次不行,编译器老是报错。后来我用了reinterpret(),还是不行。经过在网上查资料,突然意识到应该是64位机器和32位的机器的原因。64位机器上指针是8字节,而int类型是4字节,将一个8字节的转换成4字节的,会造成大量的精度缺失。因此我就new了一段新空间,用来存放其数据,传的是指针,但是我通过指针可以拿到4字节的数据。巧妙的解决了这个问题。
  • 当然还遇到很多很多技术方面的问题,到最后都能够解决。不过项目也存在了缺陷。比如在管理员权限这块。我定义刚开始的时候可以设置群主,以便进行管理员操作,群主可以设置群中的管理员,但是后来测试却发现,这个管理员也可以取消群主的权限,那么这个群主和管理员的地位明显是一样的,怪我当初设计的时候没有考虑到这一点。
  • 当然了,比起人家腾讯的QQ所实现的功能,我的还差远了,不仅仅是差远了,应该是地球到太阳的距离。。。。
  • 一个项目可以让我对于所学的知识有更加深刻的认识和了解。也将自己所学的线程的相关知识、生产者-消费者模型、数据库、文件I/O等等好多知识拼接在一起。因此这个项目让我收获很多。

你可能感兴趣的:(Linux)