引言:本人经过一段对C++以及QT的学习之后,就像找个项目练练手,检验一下自己这段时间学习的成果;于是,经过3天的创作(主要是css美化花了不少时间),终于写出来了一个聊天室,项目也打包了,分为两个包(客户端和服务器端),经过我的测试,聊天室至少可以同时容纳10人以上(最高能同时连接多少我没有测试);在这期间,我也遇到了很多的困难,通过上网自学相关内容,解决困难的同时,也使自己的编程能力有了很大的提升。
开发软件:Qt Creator
重要类:QTcpServer:是一个基于TCP协议的服务器管理类,用于管理服务器的TCP连接,并不具备读写能力、QTcpSocket:继承自QIODevice,因此用于TCP的输入输出操作、QTextStream:表示一个文本流,可以高效的进行字符的输入输出操作(头像功能就是基于此实现的)
基础功能:服务器端通过TCP协议连接多台客户端设备,实现消息的接收和转发,并存入链表中,以便客户端查看历史消息;多个客户端输入相同IP和端口号后,之后就可选择自己喜欢的头像(内置八款精美头像)并自定义昵称,然后进行连接(相当于进入了同一间“聊天室”),就可以愉快的聊天了!
服务器端:
客户端:
设计思路:当时做的时候只想着实现一下多人聊天的功能,以及使用TCP实现多人连接,所以就没有做注册登录界面,在上图中,进入客户端后,会有一个欢迎页面,在几秒钟后会自动销毁,然后会创建出聊天界面,在聊天界面中先进行连接,想要在同一个“聊天室”内聊天,就要所有客户端的输入相同的IP和端口号,然后点击连接按钮,这时就会连接到客户端(原理如下图所示)
此时,不能直接发送消息,因为我设定的是每个人只能更换一次头像和昵称,因此,当写入消息并发送后,头像更改的“切换”按钮以及昵称输入框会被禁用,所以,在发送消息前,一定要选好自己的头像(内部八选一)和昵称。
UI设计思路:首先我的页面背景主要使用了这几个类用以绘制背景
使用这两行代码会使你的页面更专业一些~~~
头像部分是先将头像地址放入到顺序容器中,通过按钮更改头像,然后拼接到字符创中。
其他的一些就是更改一下每个元素的“css样式表”了,这个看个人的发挥了~
历史记录功能:由于在使用数据库对消息存储时,总是会出现一些莫名其妙的问题,还有就是消息不多时,以及不考虑内存的节省情况下,我选择了使用顺序容器来存储历史消息。在服务器端将各个客户端发送的消息提前预存到顺序容器内,弊端就是服务器关闭后,容器内的消息会被销毁。然后客户端点击历史记录按钮后,会向服务器发送一个标识符,同时打开一个新的页面,服务器一直在判断消息是否有标识符存在,此时有的话,就会遍历历史记录的顺序容器,然后发送给该客户端。
最后:我是个新手,代码实现各部分也很简陋,望各位看官不喜勿喷,如若喜欢需要代码的话,请一键三连,私信我哦,看见会第一时间回复的,希望我们共同进步。