/*****************************************************************************
MARK:客户端命令 常用表情
0登录界面 -HELLO \( ̄︶ ̄)>
1注册 -LOVE ( ̄▽ ̄)~*
2登录 -BISHI ( ̄ε  ̄)
3修改密码 -HAIXIU (≧﹏ ≦)
4退出程序/退出登录
5YES 姓名替换
6NO /ClientA/HOME
7聊天界面 ClientA 大侠,快放小人回家过年
8私聊
9群聊
10查看注册用户
11查看在线用户
12踢人
13禁言
14查看聊天记录
19返回登录界面
20查看帮助
Send cmd :通信命令 MARK
1注册用户 1注册
2登录用户 2登录
3发送私聊消息 8私聊
4广播 9群聊
5询问数据库记录 10查看注册用户
6询问在线用户 11查看在线用户
7踢人 12踢人
8禁言 13禁言
9下线请求 19返回登录界面
request result:服务器命令(READ)
0 服务器断开连接
11注册成功 10注册失败
21登录成功 20登录失败 22强制登录 23vip登录成功 24聊天室已满
31私聊成功 30私聊失败 32收到私聊 33拒绝发给自己 34找到私聊对象 35禁言无法私聊
41广播成功 42收到广播 44找到广播对象 45禁言无法广播
51数据库记录访问成功
61在线记录访问成功
71踢人成功 70踢人失败 72收到被踢消息 73拒绝踢自己 74找到被踢的人
81禁言成功 80禁言失败 82收到禁言消息 83拒绝禁言自己 84找到被禁言的人
91下线 92强制下线
100没有权限
Mini_chatroom
copyright by 陈志辉
*****************************************************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <strings.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <termios.h>
#include <sys/stat.h>
#include <fcntl.h>
#define SERV_PORT 9000
#define BUFF_SIZE 1024
int MARK ;
int RUN ;
int ONLINE;
int WRITE ;
int READ0 ;
int READ11; int READ10;
int READ21; int READ20; int READ23;
int READ31; int READ30; int READ32; int READ33; int READ35;
int READ41; int READ42; int READ45;
int READ51;
int READ61;
int READ71; int READ70; int READ72; int READ73;
int READ81; int READ80; int READ82; int READ83;
int READ91;
int READ100;
struct user
{
int socketfd;
int toSocketfd;
char name[20];
char toName[20];
char msg[100];
int result;
int cmd;
int nrow;
int ncolumn;
char resultp[40][20];
char catalogue[20][20];
int num;
int vip[20];
int silence[20];
};
pthread_mutex_t mutex;
int Get_time(void)//六位数组
{
/* int *temp =p; */
time_t now ;
struct tm *t ;
time(&now) ;
t = localtime(&now);
/* *(temp++) = t->tm_year+1900;
*(temp++) = t->tm_mon+1;
*(temp++) = t->tm_mday;
*(temp++) = t->tm_hour;
*(temp++) = t->tm_min;
*temp = t->tm_sec; */
return (t->tm_mon+1)*1000000+t->tm_mday*10000+t->tm_hour*100+t->tm_min;
}
void Welecome(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# W #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# We #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Wel #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welc #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welco #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcom #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome t #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to M #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mi #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Min #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mini #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mini_ #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mini_C #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mini_Ch #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mini_Cha #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mini_Chat #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mini_Chatr #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mini_Chatro #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(150000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mini_Chatroo #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(150000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Welcome to Mini_Chatroom #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Home(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# E #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# En #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Ent #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Ente #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter y #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter yo #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter you #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter your #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter your c #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter your ch #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter your cho #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter your choi #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter your choic #\n");
printf("\t####################################################\n");
usleep(20000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# L ------------------------------登录 #\n");
printf("\t# R ------------------------------注册 #\n");
printf("\t# Q--------------------------------退出 #\n");
printf("\t# Enter your choice #\n");
printf("\t####################################################\n");
usleep(20000);
}
void Scan_name(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Please enter your account #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Scan_name_empty(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Account cannot be empty, #\n");
printf("\t# Please enter passward again #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Scan_passward(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Please enter password #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Scan_passward_nosame(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Enter two passworlds are not the same #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Scan_passward_empty(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Password cannot be empty, #\n");
printf("\t# Please enter passward again #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Scan_passward_again(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Please enter password again #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Scan_error(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Please enter a valid selection ! #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Return(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Returning #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Returning . #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Returning .. #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Returning ... #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
}
void Load(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# The user is logging in ... #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Load_success(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Login Successful ! #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Load_VIP_success(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# VIP Login Successful ! #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Load_fail(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Login Failed ! #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Register(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# The user is registering ... #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Register_success(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# User registration account success ! #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Register_fail(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Account already exists ! #\n");
printf("\t# Would you like to register again(Y/N)? #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Help(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# HELP #\n");
printf("\t# 表情包(私聊/群消息): #\n");
printf("\t# -HELLO------------------\( ̄︶ ̄)> #\n");
printf("\t# -LOVE -------------------( ̄▽ ̄)~* #\n");
printf("\t# -BISHI-------------------( ̄ε  ̄) #\n");
printf("\t# -HAIXIU------------------(≧﹏ ≦) #\n");
printf("\t# #\n");
printf("\t# 姓名替换(群消息): #\n");
printf("\t# /ClientA/HOME #\n");
printf("\t# ClientA 大侠,快放小人回家过年 #\n");
printf("\t####################################################\n");
}
void Chat1(void)
{
system("clear");
int a = Get_time();
if(ONLINE)
{
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# 在线 #\n");
printf("\t# S ------------------------------私聊 #\n");
printf("\t# B ------------------------------群聊 #\n");
printf("\t# F--------------------------------禁言 #\n");
printf("\t# T--------------------------------踢人 #\n");
printf("\t# 0----------------------------查看注册用户 #\n");
printf("\t# 1----------------------------查看在线用户 #\n");
printf("\t# 2----------------------------查看聊天记录 #\n");
printf("\t# #\n");
printf("\t# 帮助(HELP) 下线(Q) #\n");
printf("\t####################################################\n");
}
else
{
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# 离线 #\n");
printf("\t# S ------------------------------私聊 #\n");
printf("\t# B ------------------------------群聊 #\n");
printf("\t# 0----------------------------查看注册用户 #\n");
printf("\t# 1----------------------------查看在线用户 #\n");
printf("\t# 2--------------------------------踢人 #\n");
printf("\t# 3--------------------------------禁言 #\n");
printf("\t# 4----------------------------查看聊天记录 #\n");
printf("\t# #\n");
printf("\t# 帮助(HELP) 下线(Q) #\n");
printf("\t####################################################\n");
}
}
void Exit1(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Is returned to the login interface... #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
}
void Exit_systeme(void)
{
system("clear");
int a =Get_time();
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# S #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Sy #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Sys #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Syst #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# Syste #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System i #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is a #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is ab #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is abo #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is abou #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is about #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is about t #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is about to #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is about to q #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is about to qu #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is about to qui #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is about to quit #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is about to quit. #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is about to quit.. #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(200000);
system("clear");
printf("\t####################################################\n");
printf("\t# 2017-%02d-%02d %02d:%02d Mini_Chatroom #\n",a/1000000,a%1000000/10000,a%10000/100,a%100);
printf("\t# #\n");
printf("\t# System is about to quit... #\n");
printf("\t# #\n");
printf("\t# #\n");
printf("\t####################################################\n");
usleep(100000);
}
void Initsystem(void)
{
MARK = 0;
RUN = 1;
ONLINE = 0;
WRITE = 0;
READ0 = 0;
READ11 = 0; READ10 = 0;
READ21 = 0; READ20 = 0; READ23 = 0;
READ31 = 0; READ30 = 0; READ32 = 0; READ33 = 0; READ35 = 0;
READ41 = 0; READ42 = 0; READ45 = 0;
READ51 = 0;
READ61 = 0;
READ71 = 0; READ70 = 0; READ72 = 0; READ73 = 0;
READ81 = 0; READ80 = 0; READ82 = 0; READ83 = 0;
READ91 = 0;
READ100 = 0;
}
void client_log_init(struct user * userInfo)
{
printf("正在初始化聊天记录\n");
int fd;
char buf[20];
sprintf(buf, "%s_log.txt",userInfo->name);
fd = open(buf, O_RDWR | O_CREAT, S_IWUSR | S_IRUSR | S_IXUSR);
if (-1 == fd)
{
perror("open client_log.txt");
}
close(fd);
}
void Clbuf()
{
char ch;
while((getchar())!='\n'&&ch!=EOF);
}
int mygetch()
{
struct termios oldt,
newt;
int ch;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
tcsetattr(STDIN_FILENO,TCSANOW, &oldt);
return ch;
}
int Scan_order_choice(void)
{
char a[11];
char *p5 = "Y";
char *p6 = "N";
printf("\t");
scanf("%11s",a);
Clbuf();
if(strcmp(a,p5) == 0)
{
MARK = 5;//yes
}
else if(strcmp(a,p6) == 0)
{
MARK = 6;//no
}
else
{
return -1;
}
return 0;
}
int Scan_order(void)
{
char a[11];
char *p1 = "R";
char *p2 = "L";
//char *p3 = "";
char *p4 = "Q";
printf("\t");
scanf("%11s",a);
Clbuf();
if(a[11] == '\0')
{
return -1;//长度越界!
}
else if(strcmp(a,p1) == 0)
{
MARK = 1;//注册账户
}
else if(strcmp(a,p2) == 0)
{
MARK = 2;//登录账户
}
/* else if(strcmp(a,p3) == 0)
{
MARK = 3;//忘记(或者修改)密码
} */
else if(strcmp(a,p4) == 0)
{
MARK = 4;//退出程序
}
else
{
return -1;
}
return 0;
}
int Scan_order_online(void)
{
char a[11];
//char *p1 = "R";
//char *p2 = "L";
//char *p3 = "F";
char *p4 = "Q";
//char *p5 = "Y";
//char *p6 = "N";
char *p8 = "S";
char *p9 = "B";
char *p10 = "0";
char *p11 = "1";
char *p12 = "T";
char *p13 = "F";
char *p14 = "2";
//char *p19 = "E";
char *p20 = "HELP";
printf("\t");
scanf("%11s",a);
Clbuf();
if(a[11] == '\0')
{
return -1;//长度越界!
}
/* else if(strcmp(a,p1) == 0)
{
MARK = 1;//注册账户
}
else if(strcmp(a,p2) == 0)
{
MARK = 2;//登录账户
}
else if(strcmp(a,p3) == 0)
{
MARK = 3;//忘记(或者修改)密码
} */
else if(strcmp(a,p4) == 0)
{
MARK = 4;//退出程序
}
/* else if(strcmp(a,p5) == 0)
{
MARK = 5;//yes
}
else if(strcmp(a,p6) == 0)
{
MARK = 6;//no
} */
else if(strcmp(a,p8) == 0)
{
MARK = 8;//发送私聊消息
}
else if(strcmp(a,p9) == 0)
{
MARK = 9;//群聊
}
else if(strcmp(a,p10) == 0)
{
MARK = 10;//查看注册用户
}
else if(strcmp(a,p11) == 0)
{
MARK = 11;//查看在线用户
}
else if(strcmp(a,p12) == 0)
{
MARK = 12;//踢人
}
else if(strcmp(a,p13) == 0)
{
MARK = 13;//禁言
}
else if(strcmp(a,p14) == 0)
{
MARK = 14;//禁言
}
/* else if(strcmp(a,p19) == 0)
{
MARK = 19;//返回登录界面
} */
else if(strcmp(a,p20) == 0)
{
MARK = 20;//查看帮助
}
else
{
return -1;
}
return 0;
}
/* int mygetch()
{
struct termios oldt;
struct termios newt;
int ch;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
tcsetattr(STDIN_FILENO,TCSANOW, &oldt);
return ch;
} */
/* Send cmd
1注册用户
2登录用户
8发送私聊消息
19退出登录
*/
void fillMsg(struct user *userInfo)//发送数据内容
{
//填写cmd
switch(MARK)
{
case 1:
{
userInfo->cmd = 1;
break;
}
case 2:
{
userInfo->cmd = 2;
break;
}
case 8:
{
userInfo->cmd = 3;
break;
}
case 9:
{
userInfo->cmd = 4;
break;
}
case 10:
{
userInfo->cmd = 5;
break;
}
case 11:
{
userInfo->cmd = 6;
break;
}
case 12:
{
userInfo->cmd = 7;
break;
}
case 13:
{
userInfo->cmd = 8;
break;
}
case 19:
{
userInfo->cmd = 9;
break;
}
default :
{
printf("\t错误 未知MARK:%d\n",MARK);
break;
}
}
int i;
switch(userInfo->cmd)
{
case 1:
{
char a[20];
char pass1[20];
char pass2[20];
char temp;
int same;
int emp;
emp = 1;
same = 0;
while(emp == 1)
{
Scan_name();
printf("\t");
scanf("%[^\n]",userInfo->name);
Clbuf();
if(userInfo->name[0] == '\0')
{
Scan_name_empty();
sleep(2);
}
else
{
emp = 0;
}
}
Scan_passward();
while(same == 0)
{
printf("\t");
i = 0;
while(i < 20)
{
pass1[i] = mygetch();
if(pass1[i] == 10)
{
break;
}
printf("*");
i++;
}
pass1[i] = '\0';
printf("\n");
Scan_passward_again();
printf("\t");
i = 0;
while(i < 20)
{
pass2[i] = mygetch();
if(pass2[i] == 10)
{
break;
}
printf("*");
i++;
}
pass2[i] = '\0';
printf("\n");
if(strcmp(pass1,pass2) != 0)
{
Scan_passward_nosame();
printf("\tpass1:%s\n",pass1);
printf("\tpass2:%s\n",pass2);
sleep(3);
Scan_passward();
}
else if(i == 0)
{
Scan_passward_empty();
sleep(2);
}
else
{
same = 1;
strcpy(userInfo->msg,pass1);
}
}
break;
}
case 2:
{
char pass3[20];
Scan_name();
printf("\t");
scanf ("%[^\n]", userInfo->name);
Clbuf();
Scan_passward();
printf("\t");
i = 0;
do
{
while(i < 20)
{
pass3[i] = mygetch();
if(pass3[i] == 10)
{
break;
}
printf("*");
i++;
}
pass3[i] = '\0';
printf("\n");
if(i == 0)
{
printf("\t密码不能为空 \n请重新输入密码:");
}
}while(i == 0);
strcpy(userInfo->msg,pass3);
break;
}
case 3:
{
printf("\tSend to :");
scanf("%[^\n]",userInfo->toName);
Clbuf();
printf("\tMessage :");
scanf("%[^\n]",userInfo->msg);
Clbuf();
if(strcmp(userInfo->msg,"-HELLO") == 0)
{
strcpy(userInfo->msg,"\( ̄︶ ̄)> ");
}
else if(strcmp(userInfo->msg,"-LOVE") == 0)
{
strcpy(userInfo->msg,"( ̄▽ ̄)~*");
}
else if(strcmp(userInfo->msg,"-BISHI") == 0)
{
strcpy(userInfo->msg,"( ̄▽ ̄)~*");
}
else if(strcmp(userInfo->msg,"-HAIXIU") == 0)
{
strcpy(userInfo->msg,"(≧ ﹏ ≦)");
}
break;
}
case 4:
{
printf("\tMessage :");
scanf("%[^\n]",userInfo->msg);
Clbuf();
if(strcmp(userInfo->msg,"-HELLO") == 0)
{
strcpy(userInfo->msg,"\( ̄︶ ̄)> ");
}
else if(strcmp(userInfo->msg,"-LOVE") == 0)
{
strcpy(userInfo->msg,"( ̄▽ ̄)~*");
}
else if(strcmp(userInfo->msg,"-BISHI") == 0)
{
strcpy(userInfo->msg,"( ̄▽ ̄)~*");
}
else if(strcmp(userInfo->msg,"-HAIXIU") == 0)
{
strcpy(userInfo->msg,"≧﹏ ≦)");
}
if(userInfo->msg[0] == '/')
{
char a[100];
char b[100];
int j = 0;
for(i = 1; i < 100; i++)
{
if(userInfo->msg[i] == '/')
{
a[i] = '\0';
i++;
while(userInfo->msg[i] != '\0')
{
b[j] = userInfo->msg[i];
j++;
i++;
}
b[j] = '\0';
if(strcmp(b, "WELCOME") == 0)
{
strcpy(userInfo->msg,a);
strcat(userInfo->msg,"大侠,快放小人回家过年");
break;
}
else if(0)
{
//其他姓名替换
break;
}
else
{
break;
}
}
a[i - 1] = userInfo->msg[i];
}
}
break;
}
case 5:
{
break;
}
case 6:
{
break;
}
case 7:
{
printf("\tTick who ?:");
scanf("%[^\n]",userInfo->toName);
Clbuf();
break;
}
case 8:
{
printf("\tLet who remain silent?:");
scanf("%[^\n]",userInfo->toName);
Clbuf();
break;
break;
}
case 9:
{
break;
}
default :
{
printf("\t错误 未知cmd:%d\n",userInfo->cmd);
break;
}
}
}
void* write_to_server(void *arg)//发送
{
int sfd = (int)arg;
struct user userInfo;
int fd;
int ret;
char buf[201] = {0};
while (1)
{
while(WRITE == 0);
if(WRITE > 0)//发给服务器 WRITE:发送次数
{
memset(&userInfo.cmd, 0, sizeof(userInfo.cmd));
memset(&userInfo.result, 0, sizeof(userInfo.result));
fillMsg(&userInfo);
//printf("\tSend cmd:%d\n",userInfo.cmd);
int writeSize = write(sfd, &userInfo, sizeof(userInfo));
if (writeSize == -1)
{
perror("write");
return;
}
WRITE--;
}
else if(WRITE == -1)//自发自收 查看聊天纪录
{
printf("\t用户%s的聊天记录:\n",userInfo.name);
sprintf(buf, "%s_log.txt",userInfo.name);
fd = open(buf, O_RDONLY);
if (-1 == fd)
{
perror("查看聊天纪录");
}
while(1)
{
memset(buf, 0, sizeof(buf));
ret = read(fd, buf, 200);
if (ret == -1)
{
perror("查看聊天纪录");
}
printf("\t%s\n",buf);
if (0 == ret)
{
break;
}
}
WRITE = 0;
}
else
{
printf("\t错误 WRITE:%d\n",WRITE);
WRITE = 0;
}
}
}
void* read_from_server(void *arg)//读数据
{
int i;
int sfd = (int)arg;
int fd;
int ret;
char buf[201] = {0};
struct user userInfo;
while (1)
{
memset(&userInfo, 0, sizeof(userInfo));
int readSize = read(sfd, &userInfo, sizeof(userInfo));
if (readSize == -1)
{
perror("read");
return;
}
//printf("\tREAD result %d!\n",userInfo.result);
switch(userInfo.result)
{
case 0://服务器崩溃
{
ONLINE = 0; //强制下线
printf("\t检测到服务器断开连接\n!!!\n");
printf("\t输入任意字符退出\n");
MARK = 4;
READ0 = 1;
while(READ0);
break ;
}
case 10:
{
READ10 = 1;
while(READ10);
break ;
}
case 11:
{
client_log_init(&userInfo);
READ11 = 1;
while(READ11);
break ;
}
case 20:
{
READ20 = 1;
while(READ20);
break;
}
case 21://登录成功
{
client_log_init(&userInfo);
READ21 = 1;
while(READ21);
break;
}
case 23://vip登录成功
{
client_log_init(&userInfo);
READ23 = 1;
while(READ23);
break;
}
case 30:
{
READ30 = 1;
while(READ30);
break;
}
case 31:
{
READ31 = 1;
while(READ31);
break;
}
case 32://收到私聊消息!!!
{
printf("\t%s(私聊): %s\n",userInfo.name,userInfo.msg);
sprintf(buf, "%s_log.txt",userInfo.toName);
fd = open(buf, O_RDWR | O_APPEND | O_CREAT , S_IWUSR | S_IRUSR | S_IXUSR);
if (-1 == fd)
{
perror("client_log.txt");
}
sprintf(buf, "%s(私聊): %s",userInfo.name,userInfo.msg);
ret = write(fd, buf, 200);
if (-1 == ret)
{
perror("write");
}
close(fd);
READ32 = 1;
break;
}
case 33:
{
READ33 = 1;
while(READ33);
break;
}
case 35:
{
READ35 = 1;
while(READ35);
break;
}
case 41:
{
READ41 = 1;
while(READ41);
break;
}
case 42:
{
printf("\t%s(群消息):%s\n",userInfo.name,userInfo.msg);
sprintf(buf, "%s_log.txt",userInfo.toName);
fd = open(buf, O_RDWR | O_APPEND | O_CREAT , S_IWUSR | S_IRUSR | S_IXUSR);
if (-1 == fd)
{
perror("client_log.txt");
}
sprintf(buf, "%s(群消息): %s",userInfo.name,userInfo.msg);
ret = write(fd, buf, 200);
if (-1 == ret)
{
perror("write");
}
close(fd);
READ42 = 1;
break;
}
case 45:
{
READ45 = 1;
while(READ45);
break;
}
case 51://数据库记录访问成功!!
{
printf("\t已注册用户:\n");
printf("\tname\tvip\n");
for(i = 0;i < userInfo.ncolumn*userInfo.nrow; i++)
{
printf("\t%s",userInfo.resultp[i]);
i++;
if(userInfo.resultp[i][0] == '1')
{
printf("\tyes\n");
}
else
{
printf("\tno\n");
//printf("it is %d\n",);
}
}
READ51 = 1;
while(READ51);
break;
}
case 61://在线记录访问成功
{
printf("\t已登录用户:\n");
for(i = 0; i < userInfo.num; i++)
{
printf("%s ",userInfo.catalogue[i]);
if(userInfo.vip[i])
{
printf("\tvip会员 ");
}
else
{
printf("\t普通用户");
}
if(userInfo.silence[i])
{
printf("\t已被禁言\n");
}
else
{
printf("\t未被禁言\n");
}
}
READ61 = 1;
while(READ61);
break;
}
case 70:
{
READ70 = 1;
while(READ70);
break;
}
case 71:
{
READ71 = 1;
while(READ71);
break;
}
case 72://踢出Mini_chatroom!!!
{
printf("\t您已经被vip用户%s踢出Mini_chatroom\n",userInfo.name);
printf("\t输入任意字符退出\n");
ONLINE = 0;
READ72 = 1;
break;
}
case 73:
{
READ73 = 1;
while(READ73);
break;
}
case 80:
{
READ80 = 1;
while(READ80);
break;
}
case 81:
{
READ81 = 1;
while(READ81);
break;
}
case 82://已经被vip用户禁言
{
printf("\t您已经被vip用户%s禁言\n",userInfo.name);
READ82 = 1;
break;
}
case 83:
{
READ83 = 1;
while(READ83);
break;
}
case 91:
{
printf("\t您已经下线\n");
MARK = 0;
ONLINE = 0;
READ91 = 1;
break;
}
case 92:
{
printf("\t您的账号在其他地方登陆\n");
printf("\t输入任意字符退出\n");
MARK = 0;
ONLINE = 0;
READ91 = 1;
break;
}
case 100:
{
READ100 = 1;
while(READ100);
break;
}
default :
{
printf("\t错误 未知cmd %d\n", userInfo.result);
break;
}
}
}
}
int main(int argc, char *argv[])
{
if (argc != 2)
{
printf("\tUsage:./fuwuqi IP_ADDRESS\n");
return -1;
}
Initsystem();
int server_sockfd;
int ret;
struct sockaddr_in client_addr;
int i;
pthread_t tid1;
pthread_t tid2;
pthread_t tid3;
// 创建监听套接字
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(server_sockfd == -1)
{
perror("create socket error");
return -1;
}
// 初始化服务器地址结构
bzero(&client_addr, sizeof(client_addr)); // 将地址结构变量清零
client_addr.sin_family = AF_INET; // 选择IPV4地址
inet_aton(argv[1], &client_addr.sin_addr); // 填写服务器地址
client_addr.sin_port = htons(SERV_PORT); // 填写服务器端口
// 连接服务器
ret = connect(server_sockfd, (struct sockaddr *)&client_addr, sizeof (client_addr));
if (ret != 0)
{
perror("connect error");
return -1;
}
ret = pthread_create(&tid1, NULL, write_to_server, (void *)server_sockfd);
if (ret != 0)
{
printf ("\tcreate pthread error!\n");
return -1;
}
ret = pthread_create(&tid2, NULL, read_from_server, (void *)server_sockfd);
if (ret != 0)
{
printf ("\tcreate pthread error!\n");
return -1;
}
/* ret = pthread_create(&tid3, NULL, Scan_order_online, (void *)server_sockfd);
if (ret != 0)
{
printf ("create pthread error!\n");
return -1;
} */
pthread_detach(tid1); // 线程分离
pthread_detach(tid2); // 线程分离
pthread_detach(tid3); // 线程分离
Welecome();
sleep(2);
while(RUN)
{
//printf("#MARK:%d\n",MARK);
switch(MARK)
{
/*MARK
0登录界面
1注册
2登录
3修改密码
4退出程序
5YES
6NO
7登陆上线
8私聊
9群聊
10
19返回登录界面
*/
case 0://登录界面
{
Home();
while(Scan_order())
{
Scan_error();
sleep(2);
Home();
}
break;
}
case 1://注册
{
Register();
sleep(2);
WRITE = 1;//发送cmd
while(!READ11 && !READ10 && !READ0);//等待result
//READ11 = 0;
//READ10 = 0;
if(READ10)
{
Register_fail();
Scan_order_choice();
while(!(MARK ==5 || MARK == 6))
{
printf("\tPlease enter a valid selection :(Y/N)\n\t");
Scan_order_choice();
}
if(MARK == 5)
{
Return();
MARK = 1;
}
else if(MARK == 6)
{
Return();
MARK = 0;
}
else
{
printf("\t错误 注册异常\n");
sleep(2);
MARK = 0;
}
READ10 = 0;
}
else if(READ11)
{
Register_success();
ONLINE = 1;
printf("\t是否立即登录(Y/N)? ");
Scan_order_choice();
while(!(MARK ==5 || MARK == 6))
{
printf("\t请输入正确选择(Y/N) ");
Scan_order_choice();
}
if(MARK == 5)
{
MARK = 7;
}
else if(MARK == 6)
{
MARK = 19;
}
READ11 = 0;
}
else
{
printf("\t错误 注册\n");
}
break;
}
case 2://登录
{
Load();
WRITE = 1;//发送cmd
while(!READ21 && !READ20 && !READ23 && !READ0);//等待result
//READ21 = 0;
//READ20 = 0;
if(READ20)
{
Load_fail();
printf("\t登录失败:用户名或密码不正确\n");
printf("\t是否重新登录(Y/N)? ");
Scan_order_choice();
while(!(MARK ==5 || MARK == 6))
{
printf("\t请输入正确选择(Y/N) ");
while(Scan_order_choice());
}
if(MARK == 5)
{
printf("\t正在跳转登录界面\n");
MARK = 2;
}
else if(MARK == 6)
{
printf("\t正在跳转主界面\n");
MARK = 0;
}
READ20 = 0;
}
else if(READ21)
{
Load_success();
printf("\t正在跳转聊天界面\n");
sleep(2);
ONLINE = 1;
MARK = 7;
READ21 = 0;
}
else if(READ23)
{
Load_VIP_success();
printf("\t正在跳转聊天界面\n");
ONLINE = 1;
sleep(2);
MARK = 7;
READ23 = 0;
}
else
{
printf("\t错误 登录\n");
}
break;
}
/* case 3://修改密码
{
break;
} */
case 4://退出
{
/* WRITE = 1;//发送cmd
while(!READ91);//等待result
READ91 = 0; */
sleep(2);
RUN = 0;
Exit_systeme();
system("clear");
break;
}
case 7://登陆上线
{
if(ONLINE == 0)
{
printf("\t网络异常\n");
sleep(2);
}
while(ONLINE)
{
switch(MARK)
{
case 4://下线
{
ONLINE = 0;
MARK =19;
break;
}
case 7://聊天界面
{
Chat1();
printf("\t请输入命令:");
Scan_order_online();
if(ONLINE == 0)
{
MARK = 4;
}
break;
}
case 8://私聊
{
WRITE = 1; //发送cmd
while(!READ30 && !READ31 && !READ33 && !READ35 && !READ0);//等待result
if(READ30)
{
printf("\t发送消息失败,用户不在线\n");
MARK = 7;
READ30 = 0;
}
else if(READ31)
{
printf("\t发送消息成功\n");
MARK = 7;
READ31 = 0;
}
else if(READ33)
{
printf("\t亲爱的麋鹿小姐,请不要发送消息给自己\n");
MARK = 7;
READ33 = 0;
}
else if(READ35)
{
printf("\t你已被禁言 无法发送消息\n");
MARK = 7;
READ35 = 0;
}
else
{
printf("\t错误 私聊\n");
}
/* READ30 = 0;
READ31 = 0;
READ33 = 0;
READ35 = 0; */
printf("\t按任意键继续:");
//Clbuf();
getchar();
break;
}
case 9://群聊
{
WRITE = 1; //发送cmd
while(!READ41 && !READ45 && !READ0);//等待result
if(READ41)
{
printf("\t发送群消息成功\n");
MARK = 7;
READ41 = 0;
}
else if(READ45)
{
printf("\t你已被禁言 无法发送群消息\n");
MARK = 7;
READ45 = 0;
}
else
{
printf("\t错误 群聊\n");
}
printf("\t按任意键继续:");
//Clbuf();
getchar();
break;
}
case 10://查看注册用户
{
WRITE = 1; //发送cmd
while(!READ51 && !READ0);//等待result
if(READ51)
{
MARK = 7;
READ51 = 0;
}
else
{
printf("\t错误 查看注册用户\n");
}
printf("\t按任意键继续:");
//Clbuf();
getchar();
break;
}
case 11://查看在线用户
{
WRITE = 1; //发送cmd
while(!READ61 && !READ0 && !READ0);//等待result
if(READ61)
{
MARK = 7;
READ61 = 0;
}
else
{
printf("\t错误 查看在线用户\n");
}
printf("\t按任意键继续:");
//Clbuf();
getchar();
break;
}
case 12://踢人
{
WRITE = 1; //发送cmd
while(!READ70 && !READ71 && !READ73 && !READ100 && !READ0);//等待result
if(READ70)
{
printf("\t该用户不在线\n");
MARK = 7;
READ70 = 0;
}
else if(READ71)
{
printf("\t踢人成功\n");
MARK = 7;
READ71 = 0;
}
else if(READ73)
{
printf("\t拒绝踢自己\n");
printf("\t亲爱的麋鹿小姐,请不要踢自己\n");
MARK = 7;
READ73 = 0;
}
else if(READ100)
{
printf("\t没有权限\n");
MARK = 7;
READ100 = 0;
}
else
{
printf("\t错误 踢人\n");
}
printf("\t按任意键继续:");
//Clbuf();
getchar();
break;
}
case 13://禁言
{
WRITE = 1; //发送cmd
while(!READ80 && !READ81 && !READ83 && !READ100 && !READ0);//等待result
if(READ80)
{
printf("\t禁言失败,该用户不在线\n");
MARK = 7;
READ80 = 0;
}
else if(READ81)
{
printf("\t禁言成功\n");
MARK = 7;
READ81 = 0;
}
else if(READ83)
{
printf("\t亲爱的麋鹿小姐,请不要禁言自己\n");
MARK = 7;
READ83 = 0;
}
else if(READ100)
{
printf("\t没有权限\n");
MARK = 7;
READ100 = 0;
}
else
{
printf("\t错误 禁言\n");
}
printf("\t按任意键继续:");
getchar();
break;
}
case 14:
{
printf("查看聊天记录\n");
WRITE = -1;
while(WRITE != 0);
MARK = 7;
printf("\t按任意键继续:");
getchar();
break;
}
case 20://查看帮助
{
Help();
MARK = 7;
printf("\t按任意键继续:");
getchar();
break;
}
default :
{
printf("\t错误 未知MRAK(Online):%d\n", MARK);
sleep(3);
MARK = 7;
break;
}
}
}
break;
}
case 19:
{
printf("\t返回登录界面\n");
WRITE = 1;//发送cmd
while(!READ91 && !READ0);//等待result
READ91 = 0;
sleep(2);
break;
}
default :
{
printf("\t错误 未知MARK(OFFLINE):%d\n",MARK);
sleep(2);
break;
}
}
}
close(server_sockfd);
return 0;
}
C 版本聊天室 C/S架构——客户端程序
最新推荐文章于 2024-08-02 13:18:32 发布