资源简介

linux下的网络编程,使用C语言,实现多人会话聊天室, 具体功能包括: 注册与登录系统,群聊,私聊,在线用户查询,管理员管理账户(踢下线,禁言,提升或降低权限)

资源截图

代码片段和文件信息

#include “chat.h“
int socketfd;  //套接字描述符
//菜单提示的数据结构   
typedef struct {
char cmd[40]; //format
char explain[100];//description
int  admin; //authority
}usage;
int global_admin_flag=NORMAL_USER;   //用户的权限标记,默认为0
int globel_is_shutup;    //用户是否被禁言的标记 默认为0
  
//0为普通用户具有的执行权限 ,1为管理员具有的执行权限 。
 usage help_menu[] = {
{“format“          “\tdescription“0}
{“>信息“        “\t\t与所有在线用户聊天“0}
{“:用户名>信息“     “\t选择用户聊天“0}
{“--online“            “\t显示在线用户“0}
{“--help“               “\t\t显示帮助信息“0}
{“exit“             “\t\t退出“0}
{“#kick:user“          “\t用户下线“1}
{“#shutup:user“        “\t禁止用户发言,5分钟后可自行解除禁止“ 1}
{“#advanded:user“     “\t提升用户为管理员“ 1}
{“#normal:user“        “\t降级管理员为普通用户“ 1}
{000}
}; 

pthread_mutex_t  mutex = PTHREAD_MUTEX_INITIALIZER;

int main(int argc char *argv[])
{
  signal(SIGINT signHandler); 
inits();
close(socketfd);
return 0;
}
//初始化链接
void  inits()
{
struct sockaddr_in   server;
if((socketfd=socket(AF_INETSOCK_STREAM0))==-1)
{
         perror(“creat socket error\n“);
         exit(1);
    }
bzero(&server sizeof(server));
//memset(&server0sizeof(server));
// bzero(&(server.sin_zero)8);  
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
inet_pton(AF_INETIP&server.sin_addr);
if(( connect(socketfd(struct sockaddr *)&serversizeof(struct sockaddr)))==-1)
{
         perror(“connect error\n“);
         exit(1);
    } 
reg_log(); //    login or register
pthread_t tid;//线程标识符 pthread_t 
if((pthread_create(&tidNULLpthread_fun&socketfd))==-1)
/*int pthread_create (pthread_t * thread_id,  __const pthread_attr_t * __attr
  void *(*__start_routine) (void *)
void *__restrict __arg)
线程标识符 pthread_t 
第一个参数为指向线程标识符的指针;
第二个参数用来设置线程属性,若取NULL,则生成默认属性的子线程;
第三个参数是线程运行函数的起始地址,该函数是线程体函数,即子线程将完成的工作;
第四个参数用来设定线程体函数的参数 ;若函数体不需要参数,则最后一个参数设为NULL。
*/
print_err(“client pthread_create() error“);
    writedata();
}
//显示菜单项
void show_menu()
{
int i = 0;
printf(“*********************************************\n“);
for(; help_menu[i].cmd[0] != 0; i++)
{
  if(global_admin_flag==ADMIN_USER) //管理员
   printf(“*\t%s\t\t%s\n“ help_menu[i].cmd help_menu[i].explain);
  else if(help_menu[i].admin==NORMAL_USER)//普通用户
    printf(“*\t%s\t\t%s\n“ help_menu[i].cmd help_menu[i].explain);
}
printf(“********************************************\n“);
}
//进行选择注册或登陆 。
void reg_log()
{
char ch;
printf(“1:注册;\t2:登录\n“);
printf(“请选择:“);
while(1)
{
ch=getchar();
if(ch==‘2‘)
{
int get_ret=0;
   while(1)

login();
read(socketfd&get_retsizeof(get_ret));
if(get_ret==NORMAL_USER_LOGIN_SUCCESS)//1
{
printf(“用户您已成功登录。欢迎您!\n\n“);
global_admin_flag =NORMAL_USER;//0普通用户
    show_menu();//显示菜单
break;
}
else if(get_ret==ADMIN_LOGIN_SUCCESS)//3

printf(“管理员您已成功登录。欢迎您!\n\n“);
global_admin_flag =ADMIN_USER;//1管理员
    show_menu();
break;
}
else if(get_ret==NORMAL_USER_LOGIN_FAILED_

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-11-30 20:25  chat\
     文件        3996  2013-11-29 16:31  chat\chat.h
     文件        3989  2013-11-29 16:30  chat\chat.h~
     文件       14334  2013-11-29 16:37  chat\client
     文件        9157  2013-11-29 16:36  chat\client.c
     文件        9153  2013-11-29 16:25  chat\client.c~
     文件         132  2013-11-29 16:04  chat\makefile~
     文件       21589  2013-11-29 16:36  chat\server
     文件       19064  2013-11-29 16:32  chat\server.c
     文件       19058  2013-11-29 16:32  chat\server.c~
     文件         201  2013-11-29 17:09  chat\userinfo

评论

共有 条评论