1 Star 0 Fork 0

brilliantrough/chatroom

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
rw
wr
Loading...
README

聊天室实现

用户注册登录

用户数据保存在userdata.txt文件中。并且实现的服务器对客户端的登录和注册信息进行甄别。注册操作中,对于已存在的用户不予以通过注册请求。对于输入密码错误,以及用户名称不存在也不予以通过登录请求。将这些非法操作信息返回给客户端,客户端接收信息后需重新进行登录或者注册操作。另外实现了密码输入时字符不显示。且限定密码只能为6位。用户名为9位以内的字符串。

多线程实现聊天

需要用到线程池

目前还没有用到线程池,考虑之后将用到线程池来进行互斥锁和条件变量的管理。多线程进行聊天即可。因为服务器端每个线程的recv()函数都会对该线程进行阻塞。从而使得程序正常运行。

另外所有的客户端都可通过打印bye来退出登录。但是这里有个问题,在客户端退出时,有可能出现服务器宕机的现象。目前没发现问题在哪里。

但是这里存在一个问题。 就是在输入 bye 的时候,结束客户端的进程后,有时候会出现服务器端也宕机的情况。具体原因仍未找到,猜测与我没有专门去设置下线信号有关。客户端在输入 bye 时是采用结束自己进程的方式退出。而在服务器这边则是一直在等待监听客户端对应的套接字的信号。客户端进程结束,服务器端便可识别到连接断开。接收函数返回错误,判断出错,然后跳出循环,结束本线程。这是一个被动结束的方式,而不是由客户端特意发送了一个结束信号再由服务器端的进程正常结束线程和对应套接字。

文件收发

文件收发的实质与字符串传输还是一样的,分为二进制文本传输和普通文本传输,而在 Linux 系统中对于 C 语言来说,二进制文件的读写与普通文本文件没有区别。所以只要将二进制文件与普通文件都进行读操作,再将读取到的字符串类型传输出去,然后在接收端新建一个相同文件名的文件,往里面进行写操作,将接收到的字符串再原原本本的写入到文件当中去。最后便能得到一模一样的文本文件。

但是这里还存在问题,再报告文件是否接收完毕这个地方。我设置了一个变量来专门检测文件是否已经完全被读取完并发送出去。可是出现的结果总是会将最后的空字符计算进去,从而会得到一些奇怪的结果。暂时还没有去解决。但是绝大部分情况下是能够进行正常文件收发的,像图片,PDF文件都可以。

管理员功能(禁言,踢出群聊)

管理员功能暂未实现。。。。

消息撤回功能

暂未实现。

发送表情功能

还未实现。计划采用特殊字符转义。双方都遵循同一套转义标准。特定的字符对应特定的表情颜文字等。

多用户共享数据库

可能需要使用SQL

目前没有实现数据库功能。只是通过服务器将每条由客户端发送过来的信息遍历发送给所有客户端,各个客户端接收到后打印出指定客户端发送到聊天室的信息。

图形化界面

需要用到Qt。关于 Qt 使用,我在另外两个分支里已经进行了,但是代码与这里几乎完全不同,Qt 有一套自己的体系语法去完成这些网络编程和多线程操作。

详见另外两个分支的代码和介绍说明。

空文件

简介

linux 聊天室C语言实现 展开 收起
C 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/pezayo/chatroom.git
git@gitee.com:pezayo/chatroom.git
pezayo
chatroom
chatroom
master

搜索帮助