资源简介
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
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
评论
共有 条评论