资源简介
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
相关资源
- Linux那些事儿之我是USB core
- C语言的嵌入式汇编基本使用.docx(2页
- C语言嵌入式Modbus协议栈,支持主站和
- C语言封装的HttpClient接口
- windows网络编程_文件传输
- C语言课设计算器
- C语言 学生兴趣管理系统
- c语言实现火车订票系统(控制台)源
- 模拟笔记本电脑(C语言实现)
- c语言实现竞技比赛打分系统
- KMP算法C语言程序
- Linux c语言 学生成绩管理系统
- 弹跳的小球(test.c)
- 林锐—高质量C编程
- 基于c语言的通讯录系统
- C语言全套课件与教学资料-哈工大
- 计算机二级C语言真题.docx
- C语言实现 设备信息管理系统
- GBT 28169-2011 嵌入式软件 C语言编码规范
- C语言标准库函数大全.chm
- C语言常用代码(分章节)
- c语言课程设计:客房登记系统源码
- C语言常用算法源代码
- 吕鑫:VS2015之博大精深的0基础C语言视
- c语言文都讲义2020
- c语言课件56883
- C语言推箱子win控制台
- C语言程序设计50例.docx
- 烟花优化算法(c语言版)
- C语言程序设计教材习题参考答案.do
评论
共有 条评论