C 版本聊天室 C/S架构——客户端程序

/*****************************************************************************
   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;
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值