2020.09.11
linux分享
●
●
●
#01#前言
前情回顾:
在整理上学期资料同时将部分代码分享,将以代码书写时间为时间线,按优化程度逐步发出,代码均为在linux下c编程。
上回功能:
由客户端和服务端组成,可支持多个客户端之间通信。
新增专线聊天,聊天室,三人聊天群,以及当有人登陆和退出时对全体进行广播。
功能说明:quit退出,list查看在线列表,make自由与任意好友聊天,zxlt停留在一个好友发送框里,但可以接收到所有人发你的消息,聊天室与三人聊天同理,一个是三个人的群,一个是大家的群,查看或请求帮助help。
本次改进:
新增勿扰和挂机模式,优化服务器端提示。
勿扰和退出勿扰是一套组合,勿扰时不接收聊天消息但接收系统消息,退出勿扰后,原来没接收到的消息都可以接收到,挂机:gj不接收任何消息包括系统消息,退出后会重新接收。
本文分成4部分:
1、图片演示
2、代码截图
3、思路说明
4、下载地址
#OVER#
#02#图片演示
#OVER#
#03#代码截图
头文件:xxlx.h/*
* char.h
*
* Created on: 2020年5月22日
* Author: wu
*/
#ifndef CHAR_H_
#define CHAR_H_
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef struct{
pid_t pid;
char name[64];
int used;//0free 1sued
}client_t;
#define zd 64
typedef struct{
pid_t pid;
char name[128];
char text[1024];;//0free 1sued
}tx_t;
typedef struct{
long type;
tx_t tx;
}tx_msg;
#define tx_sise (sizeof(tx_msg)-sizeof(long))
#define server_key 0x3330001
#define xx_key 0x3330002
typedef struct{
long type;
#define server_login 0x01
#define server_out 0x02
#define server_list 0x03
union{
client_t client;
client_t clients[zd];
}data;
}server_msg;
#define server_sise (sizeof(server_msg)-sizeof(long))
#endif /* CHAR_H_ */
#OVER#
#04#思路说明
思路说明
1、服务器维护一个在线列表,记录登录客户端的pid和用户名,以pid作为客户端之间的通信类型
2、客户端使用二个线程,一个接受来自其它客户端的消息,一个接受来自服务器的消息,专线聊天则是在聊天基础上加个while循环,聊天室相当于对全体的广播,三人聊天群则是在专线聊天基础上融合聊天室,支持向多人发送消息。
3、服务器定义有三种消息队列数据类型,分别是登陆,退出,请求在线列表;在接受到请求在线列表后,会以请求者的pid为消息类型发送回去,同时有新的人登陆、退出时会向全部客户端进行广播。
4、勿扰则是退出接收客户端消息的线程就可以了;挂机在勿扰的基础上把接收系统消息的线程也推出了,也就是退出二个线程。退出这二个模式则是重新打开这二个线程。
#OVER#
#05#结尾->获取方式
下载地址:
公众号内回复【char6】即可获取下载链接
#OVER#
●
●
●
视频来源:科学大世界
文字:科学大世界
图片:科学大世界
文章封面图:网络
如有侵权请到公众号内意见反馈处反馈
???
扫码关注我们
觉得不错点个在看呗
2020/09/11
欢迎在下方留言