用户数据保存在userdata.txt文件中。并且实现的服务器对客户端的登录和注册信息进行甄别。注册操作中,对于已存在的用户不予以通过注册请求。对于输入密码错误,以及用户名称不存在也不予以通过登录请求。将这些非法操作信息返回给客户端,客户端接收信息后需重新进行登录或者注册操作。另外实现了密码输入时字符不显示。且限定密码只能为6位。用户名为9位以内的字符串。
需要用到线程池
目前还没有用到线程池,考虑之后将用到线程池来进行互斥锁和条件变量的管理。多线程进行聊天即可。因为服务器端每个线程的recv()
函数都会对该线程进行阻塞。从而使得程序正常运行。
另外所有的客户端都可通过打印bye来退出登录。但是这里有个问题,在客户端退出时,有可能出现服务器宕机的现象。目前没发现问题在哪里。
但是这里存在一个问题。 就是在输入 bye 的时候,结束客户端的进程后,有时候会出现服务器端也宕机的情况。具体原因仍未找到,猜测与我没有专门去设置下线信号有关。客户端在输入 bye 时是采用结束自己进程的方式退出。而在服务器这边则是一直在等待监听客户端对应的套接字的信号。客户端进程结束,服务器端便可识别到连接断开。接收函数返回错误,判断出错,然后跳出循环,结束本线程。这是一个被动结束的方式,而不是由客户端特意发送了一个结束信号再由服务器端的进程正常结束线程和对应套接字。
文件收发的实质与字符串传输还是一样的,分为二进制文本传输和普通文本传输,而在 Linux 系统中对于 C 语言来说,二进制文件的读写与普通文本文件没有区别。所以只要将二进制文件与普通文件都进行读操作,再将读取到的字符串类型传输出去,然后在接收端新建一个相同文件名的文件,往里面进行写操作,将接收到的字符串再原原本本的写入到文件当中去。最后便能得到一模一样的文本文件。
但是这里还存在问题,再报告文件是否接收完毕这个地方。我设置了一个变量来专门检测文件是否已经完全被读取完并发送出去。可是出现的结果总是会将最后的空字符计算进去,从而会得到一些奇怪的结果。暂时还没有去解决。但是绝大部分情况下是能够进行正常文件收发的,像图片,PDF文件都可以。
管理员功能暂未实现。。。。
暂未实现。
还未实现。计划采用特殊字符转义。双方都遵循同一套转义标准。特定的字符对应特定的表情颜文字等。
可能需要使用SQL
目前没有实现数据库功能。只是通过服务器将每条由客户端发送过来的信息遍历发送给所有客户端,各个客户端接收到后打印出指定客户端发送到聊天室的信息。
需要用到Qt。关于 Qt 使用,我在另外两个分支里已经进行了,但是代码与这里几乎完全不同,Qt 有一套自己的体系语法去完成这些网络编程和多线程操作。
详见另外两个分支的代码和介绍说明。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。