基于Linux下的即时通讯聊天室项目(全代码 有注释 可直接运行)

这是一个基于Linux的TCP/IP协议和Socket接口的C/S架构聊天工具,包括服务器和客户端代码。实现了注册、登录、私聊、群聊、文件传输等功能。由于参数传递错误导致的问题提醒开发者编程时要仔细避免低级错误。提供了编译和运行代码的说明。
摘要由CSDN通过智能技术生成

一、序言

最近在写一个基于Linux下的聊天工具 它适合于局域网内所有人进行通信和交流。由于这个系统采用了tcp/ip协议和socket接口,所以主框架采用c/s架构。从总体来讲,该聊天系统主要包含服务端和客户端。
写了六天时间 总体来说 其实实现功能并不难 但是一定要仔细啊 因为里面包含了太多参数传递 所以一定要仔细 我就因为手贱 写存储聊天记录功能时 将服务器宏定义的一个值从200改成了300 但客户端忘改了 导致服务器与客户端传递的结构体大小不一样 所有功能都用不了 查错查了两天 才发现这个小小的错误 但真是血的教训啊… 所以大家打代码的时候一定要仔细再仔细 宁愿慢一点 也别犯低等错误 改bug真的超浪费时间 特别是一些低等错误

因为时间仓储 所以我写的并不好 功能也不是太多 但代码是可以直接运行的 大家使用的时候 有不懂的地方可以留言 我会及时答复

后期代码还会有改善 届时我会将代码更新

二、具体功能

1、注册用户功能
2、登录用户功能
3、退出客户端功能
4、管理员登录功能
5、私聊功能
6、群聊功能
7、退出登录功能<

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
客户端,采用多线程。一个接收服务器消息,一个发送消息给服务器服务器,采用select()进行IO复用。 编译文件是Makefile。 (1)用户登录: 【1】client端接收用户名和密码->存于结构体中->将结构体发送给server端。 【2】server端接收client发送的结构体->打开存储用户名密码的文件->文件写入链表中->遍历链表验证用户信息。 【3】server端验证正确发送“登陆成功”消息,错误发回“登陆失败”消息。client端接收,“登陆成功”则进入聊天,“登陆失败”则跳出。 【4】若验证成功,server端产生一个新的套接字newfd,将它与用户名封装于同一个结构体中,存储在线用户的信息。 消息、存储在线用户信息结构体: typedef struct message { int type; //服务器用于判断该执行的功能 int fd; int mode; //标志位,表示用户的发言权限,1为正常,0为禁言 char name[NAMELEN]; char mima[NAMELEN]; char from[20]; char to[20]; //聊天时的收信人 char file_name[20]; //发送文件时的文件名 char mtext[100]; //聊天时发送的消息内容 struct message *next; }Mess; (2)一对多聊天: 【1】client端发送欲发送的信息给server端。 【2】server端遍历在线人信息链表,找到每个在线人的套接字描述符,将消息发送给链表中的每个人。 【3】可以通过输入“:)”, “:(”, “bye”来发送笑脸,悲伤脸和退出聊天;检测敏感词汇“fuck”、“shit”,禁止发送。 (3)一对一聊天: 【1】client端发送欲发送的信息和信息的接收者给server端。 【2】server端根据收到的接收者名字在在线人链表中查找该接收者的套接字描述符,找到后就将消息发送给该接收者。 【3】可以通过输入“:)”, “:(”, “bye”来发送笑脸,悲伤脸和退出聊天;检测敏感词汇“fuck”、“shit”,禁止发送。 (4)文件传输 【1】client端发送预发送的文件名和接收者名字到server端。 先打开(不存在则创建)一个文件,将文件内容读到缓冲区buffer,再将buffer的内容复制到结构体Mess中,最后将结构体发送给server端。 【2】server端先将接收到的文件重命名(因为相同文件目录下不能存在同名文件),再将收到的文件和新的文件名一同放入tab1中(并且在tab1开头写“#”)发送给client端。 【3】当client端收到以“#”开头的消息,执行文件接收,先创建一个文件,再写入相应内容。 (5)管理员模式 【1】禁言 【2】解禁
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex、WY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值