资源简介
基于linux的socket多线程通信方式。采用sqlite3数据库存储用户信息.
能够实现注册、登陆、退出
私聊、群聊、修改密码、查看在线用户........
代码片段和文件信息
/*************************linux多人聊天室*********************************
*实现方式:基于linux的socket多线程通信方式。采用sqlite3数据库存储用户信息
*作者: 曹丹(Cao Dan)@cqupt
*完成时间: 2013/01/19
*************************************************************************
* */
#include
#include
#include
#include
#include
#include
#include
#include “display.h“
#include “chatroom_lib.h“
#define PORT_NUM 8765
#define BUFF_SIZE 1024
#define PASSWD_LEN 30
#define USERNAME_LEN 30
void action_log(void); //登录服务器
int action_log_in(void);
void action_register(void);
void *pthread_read(void *arg);
void sigint_handler(int signo);
void sigpipe_handler(int signo);
void reset_passwd(void);
int sockfd; //套接字描述符
char buffer_rcv[BUFF_SIZE] buffer_send[BUFF_SIZE]; //接收和发送缓存区
int main(int argc char *argv[])
{
int res choice;
if(argc != 2) {
fprintf(stderr “Usage: %s server_ip\n“ argv[0]);
exit(EXIT_FAILURE);
}
signal(SIGINT sigint_handler);
signal(SIGPIPE sigpipe_handler);
if ( confirm_socket_client(&sockfd argv[1] PORT_NUM) == -1)
exit(EXIT_FAILURE);
while(1) {
display_main_menu();
puts(“Enter your choice:“);
scanf(“%d“&choice);
getchar();
switch(choice) {
case 1: //log
action_log();
if(action_log_in() == -1) {
close(sockfd);
return 0;
}
break;
case 2: //register
action_register();
break;
case 3:
return 0; /*log out*/
default:
puts(“invalid input please enter again“);
break;
} /*end of switch choice */
} /*end of while(1)*/
return 0;
} /*end of main*/
/*signal function*/
void sigint_handler(int signo)
{
close(sockfd);
puts(“\ncaught signal SIGINT.“);
puts(“socket has been closed“);
//signal(SIGINT SIG_DFL);
exit(EXIT_SUCCESS);
}
void sigpipe_handler(int signo)
{
puts(“\ncaught signal SIGPIPE.“);
puts(“error occuredconnection may have been closed by server“);
exit(EXIT_FAILURE);
}
void action_log(void)
{
char username[USERNAME_LEN] passwd[PASSWD_LEN];
/*pormat is u:username:passwd:1*/
//respons from server
do {
puts(“Enter your username“);
scanf(“%s“username); //get username
getchar();
puts(“Enter your passwd“);
scanf(“%s“passwd); //get passwd
getchar();
sprintf(buffer_send “u:%s:%s:1\0“ username passwd);
write(sockfd buffer_send strlen(buffer_send));
read(sockfd buffer_rcv BUFF_SIZE);
puts(buffer_rcv);
}while( strncmp(buffer_rcv “OK“ 2) != 0 );
}
int action_log_in(void)
{
pthread_t thread_id;
void *thread_ret;
int n;
display_log_in_menu();
//创建线程读取服务器数据
if(pthread_create(&thread_id NULL pthread_readNULL)!=0){
perror(“pthread_create“);
exit(EXIT_FAILURE);
}
while(1) {
bzero(buffer_rcv BUFF_SIZE);
bzero(buffer_send BUFF_SIZE);
get_input_option(buffer_rcv); //获取输入选项
switch(buffer_rcv[0]) {
case ‘/‘:
case ‘-‘:
strcpy(buffer_send buffer_rcv);
write(sockfd buffer_send BUFF_SIZE);
break;
case ‘.‘:
if(!strncmp(buffer_rcv
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-01-19 16:07 Chatroom\
文件 18161 2013-01-19 16:03 Chatroom\chatroom_client
文件 5211 2013-01-19 15:49 Chatroom\chatroom_client.c
文件 5644 2013-01-19 16:03 Chatroom\chatroom_client.o
文件 8387 2013-01-19 15:53 Chatroom\chatroom_lib.c
文件 1078 2013-01-18 10:30 Chatroom\chatroom_lib.h
文件 7240 2013-01-19 16:03 Chatroom\chatroom_lib.o
文件 22411 2013-01-19 16:03 Chatroom\chatroom_server
文件 8251 2013-01-19 15:51 Chatroom\chatroom_server.c
文件 7768 2013-01-19 16:03 Chatroom\chatroom_server.o
文件 1603 2013-01-19 15:52 Chatroom\display.c
文件 162 2013-01-11 13:56 Chatroom\display.h
文件 2116 2013-01-19 16:03 Chatroom\display.o
文件 115764 2013-01-19 16:07 Chatroom\linux多人聊天室项目总结.docx.pdf
文件 519 2013-01-19 16:03 Chatroom\Makefile
文件 4969 2013-01-17 21:05 Chatroom\tags
文件 3072 2013-01-18 10:55 Chatroom\user_databa
- 上一篇:最新全国城市列表(可按首字母或拼音选择)
- 下一篇:定时删除oracle日志脚本
相关资源
- linux电子词典项目(sqlite3数据库)
- 队列多线程图片
- ssm+easyui+websocket+shiro验证+webservice
- 基于Socket技术的多人聊天室系统源码
- 简易聊天系统模拟QQ,含数据库设计
- sqlite3嵌入式数据库加密
- sqlite-tools-win32-x86-3240000.zip
- Windows高性能大并发IOCP
- ServerSocket+Swing+SQL Server2008聊天系统好
- 多核应用编程实战
- GDAL_BUILD(release).rar
- Linux网络聊天室源代码.rar
- SQLite3 for windows
- 1_qt+sqlite3程序
- sqlite3.h sqlite3头文件
- sqlite3.exe247412
- sqlite3.h头文件
- iOS sqlite3的使用増删改查
- SQLite3图形界面数据库查看工具
- wxSqlite3 for Delphi
- linux环境下QT语言写的学生成绩管理系
- sqlite3.dll
- Sqlite3对于2进制数据的操作。
- 基于qt的门禁系统
- CppSQLite基于SQLite 3.4.0
- SqlQueryStressSqlServer多线程压力测试小工
- Springboot Druid多数据源 多线程
- SQLite3基础教程(高清PDF中文版)
- Ubuntu下安装sqlite3数据库
- boa与数据库数据交互的
评论
共有 条评论