Linux Linux函数 Linux聊天程序 基于socket的TCP(有连接的)聊天程序
2015-07-14 23:35
901 查看
暂时实现的功能有:
1.群聊
2.私聊
3.登陆验证
4.注册
5.所用的在线用户
6.退出
7.管理员踢出某用户
8.管理员禁止某用户聊天
9.管理员提升某用户为管理员
10.管理员把某用户降为普通用户
*/
[cpp] view
plaincopy
/*
Author QQ: 893115871
Author Email:gfj19900401@163.com
头文件,函数声明和宏定义
*/
#ifndef CHAT_H
#define CHAT_H
#include<stdio.h>
#include<stdlib.h>
4000
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
//#include<linux/in.h>
#include<arpa/inet.h>
#include<pthread.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<signal.h>
#include<time.h> //for asctime() and time()
#include<ctype.h> //for ispunct()
#define QUEUELEN 100 //max of client
#define BUF_SIZE 256
//#define IP "127.0.0.1"
#define IP "192.168.1.101" //remote ip
#define PORT 1234 // port
#define FILENAME "userinfo" // file name for save users info(name:passwd:id:authority)
#define CLIENT_ID 1000 // client id
//========================functions================================================
#define PUBLIC_CHAT 1 //群聊
#define PRIVATE_CHAT 2 //私聊
#define CLIENT_LOGIN 3 //登陆验证
#define CLIENT_REGISTER 4 //注册
#define CLIENT_ONLINE 5 //所用的在线用户
#define CLIENT_EXIT 6 //退出
#define ADMIN_KICK_CLIENT 7 //管理员踢出某用户
#define ADMIN_SHUTUP_CLIENT 8 //管理员禁止某用户聊天
#define ADVANCED_CLIENT_TO_ADMIN 9 //管理员提升某用户为管理员
#define DROP_CLIENT_TO_NORMAL 10 //管理员把某用户降为普通用户
//====================================================================
#define NORMAL_USER_LOGIN_FAILED 0 //普通用户登录失败
#define NORMAL_USER_LOGIN_SUCCESS 1 //普通用户登录成功
#define NORMAL_USER_LOGIN_FAILED_ONLINE 2 //普通用户已经在线
#define ADMIN_LOGIN_SUCCESS 3 //管理员登录成功
#define NORMAL_USER_LOGIN_PASSWD_ERROR 4 //普通用户登录密码错误
#define REGIST_FALIED 0 //注册失败
#define REGIST_EXITED 1 //注册的用户已经存在
#define NORMAL_USER 0 //普通用户
#define ADMIN_USER 1 //管理员
// ===========client attr==========================================
typedef struct{
pthread_t tid; //线程的描述符
int sockfd; //accept的返回的客户端的新的套接字描述符
char client_name[25]; // 账号
char client_passwd[25]; //密码
int client_id; //用户ID
int is_online; // 在线状态 1 在线 0 不在线
int admin; //用户权限,1为管理员,0为普通用户
}client_info;
client_info clients[QUEUELEN];
//===========客户发送的数据结构=====================================
typedef struct send_info{
int type; //类型
char id[25]; //对方id
char buf[BUF_SIZE]; //内容
char name[25]; //用户名(昵称)
char passwd[25]; //密码
}send_info;
//================函数功能的协议====================================
typedef struct {
int fun_flag; //function flag
void (*fun)();// function pointer variable
}proto;
//====================debug============================
#define CHAT_DEBUG
#ifdef CHAT_DEBUG
#define DEBUG(message...) fprintf(stderr, message)
#else
#define DEBUG(message...)
#endif
// ========fun=========client.c====================
void print_err(char *msg);
void reg_log();
void register_client();
void login();
void init_conn();
void writefun();
void show_menu();
void wait_minutes();
void signHandler(int signNo);
// ======fun=======server.c======================
int system_init();
void connect_to_client(int socketfd );
void err(char *err_msg);
int init_clents(char *tok_file[]);
void register_new_client(send_info *send,int newfd);
void server_check_login(send_info *send,int newfd);
void client_exit(send_info *send,int newfd);
int get_sockfd(char dest[]);
void private_chat ( send_info *send,int newfd);
void public_chat (send_info *send ,int newfd);
void get_all_online_clients (send_info *send ,int newfd);
void admin_kick_client (send_info *send,int newfd);
void admin_shutup_client(send_info *send,int newfd);
void advanced_client_to_admin (send_info *send,int newfd);
void drop_client_to_normal (send_info *send,int newfd) ;
int admin_is_opt_self(send_info *send,int newfd);
int admin_opt_self(send_info *send,int newfd);
#endif
1.群聊
2.私聊
3.登陆验证
4.注册
5.所用的在线用户
6.退出
7.管理员踢出某用户
8.管理员禁止某用户聊天
9.管理员提升某用户为管理员
10.管理员把某用户降为普通用户
*/
[cpp] view
plaincopy
/*
Author QQ: 893115871
Author Email:gfj19900401@163.com
头文件,函数声明和宏定义
*/
#ifndef CHAT_H
#define CHAT_H
#include<stdio.h>
#include<stdlib.h>
4000
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
//#include<linux/in.h>
#include<arpa/inet.h>
#include<pthread.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<signal.h>
#include<time.h> //for asctime() and time()
#include<ctype.h> //for ispunct()
#define QUEUELEN 100 //max of client
#define BUF_SIZE 256
//#define IP "127.0.0.1"
#define IP "192.168.1.101" //remote ip
#define PORT 1234 // port
#define FILENAME "userinfo" // file name for save users info(name:passwd:id:authority)
#define CLIENT_ID 1000 // client id
//========================functions================================================
#define PUBLIC_CHAT 1 //群聊
#define PRIVATE_CHAT 2 //私聊
#define CLIENT_LOGIN 3 //登陆验证
#define CLIENT_REGISTER 4 //注册
#define CLIENT_ONLINE 5 //所用的在线用户
#define CLIENT_EXIT 6 //退出
#define ADMIN_KICK_CLIENT 7 //管理员踢出某用户
#define ADMIN_SHUTUP_CLIENT 8 //管理员禁止某用户聊天
#define ADVANCED_CLIENT_TO_ADMIN 9 //管理员提升某用户为管理员
#define DROP_CLIENT_TO_NORMAL 10 //管理员把某用户降为普通用户
//====================================================================
#define NORMAL_USER_LOGIN_FAILED 0 //普通用户登录失败
#define NORMAL_USER_LOGIN_SUCCESS 1 //普通用户登录成功
#define NORMAL_USER_LOGIN_FAILED_ONLINE 2 //普通用户已经在线
#define ADMIN_LOGIN_SUCCESS 3 //管理员登录成功
#define NORMAL_USER_LOGIN_PASSWD_ERROR 4 //普通用户登录密码错误
#define REGIST_FALIED 0 //注册失败
#define REGIST_EXITED 1 //注册的用户已经存在
#define NORMAL_USER 0 //普通用户
#define ADMIN_USER 1 //管理员
// ===========client attr==========================================
typedef struct{
pthread_t tid; //线程的描述符
int sockfd; //accept的返回的客户端的新的套接字描述符
char client_name[25]; // 账号
char client_passwd[25]; //密码
int client_id; //用户ID
int is_online; // 在线状态 1 在线 0 不在线
int admin; //用户权限,1为管理员,0为普通用户
}client_info;
client_info clients[QUEUELEN];
//===========客户发送的数据结构=====================================
typedef struct send_info{
int type; //类型
char id[25]; //对方id
char buf[BUF_SIZE]; //内容
char name[25]; //用户名(昵称)
char passwd[25]; //密码
}send_info;
//================函数功能的协议====================================
typedef struct {
int fun_flag; //function flag
void (*fun)();// function pointer variable
}proto;
//====================debug============================
#define CHAT_DEBUG
#ifdef CHAT_DEBUG
#define DEBUG(message...) fprintf(stderr, message)
#else
#define DEBUG(message...)
#endif
// ========fun=========client.c====================
void print_err(char *msg);
void reg_log();
void register_client();
void login();
void init_conn();
void writefun();
void show_menu();
void wait_minutes();
void signHandler(int signNo);
// ======fun=======server.c======================
int system_init();
void connect_to_client(int socketfd );
void err(char *err_msg);
int init_clents(char *tok_file[]);
void register_new_client(send_info *send,int newfd);
void server_check_login(send_info *send,int newfd);
void client_exit(send_info *send,int newfd);
int get_sockfd(char dest[]);
void private_chat ( send_info *send,int newfd);
void public_chat (send_info *send ,int newfd);
void get_all_online_clients (send_info *send ,int newfd);
void admin_kick_client (send_info *send,int newfd);
void admin_shutup_client(send_info *send,int newfd);
void advanced_client_to_admin (send_info *send,int newfd);
void drop_client_to_normal (send_info *send,int newfd) ;
int admin_is_opt_self(send_info *send,int newfd);
int admin_opt_self(send_info *send,int newfd);
#endif
相关文章推荐
- Android中使用Volley开源库进行Http网络请求(GET方式)
- iOS开发网络篇—数据缓存NSURLCache
- http权威指南读书笔记第一章
- 【工业串口和网络软件通讯平台(SuperIO)教程】一.通讯机制
- 【工业串口和网络软件通讯平台(SuperIO)教程】一.通讯机制
- Linux下将Apache(httpd)新增为系统服务及开机自启动
- linux系统网络命令(二)
- 十三、网络流
- loadrunner性能测试(http+json)
- android开发步步为营之67:使用android开源项目android-async-http异步下载文件
- 网络设备的文件管理
- 罗无线网络电话
- 网络笑话
- iOS开发--http请求设置Cookie
- 已知ip地址和其子网掩码如何求网络号子网号主机号
- iOS网络协议----HTTP/TCP/IP浅析
- Erlang--TCP学习(四)并行web server篇
- 云计算和大数据时代网络技术揭秘(三)安全的网络准入
- HTTP POST GET 本质区别详解
- 云计算和大数据时代网络技术揭秘(二)云与网的关系