资源简介
群聊模式采用C-S-C模式,即客户端发送信息给服务端,服务端进行处理返回给其他客户端。设计模式为服务器多进程响应登录、注册,单进程并发客户聊天操作,客户端多线程响应服务端反馈。
代码片段和文件信息
#include “socketInclude.h“
#include
//封装聊天窗体
struct chat_Widget{
GtkWidget *window;
GtkWidget *infoSendText*SendButton*showInfoButton;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *label;
GtkWidget *text_view;
GtkTextBuffer *buffer;
};
int sockfd;
int flags=0;//控制线程结束
int show_click=1;//控制历史消息可点次数
struct sockaddr_in serv_addr;
const char *user*password;
//获取当前系统时间并保存到结构体中
void current_system_time(int get_time[])
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
get_time[0]=timeinfo->tm_year+1900;
get_time[1]=timeinfo->tm_mon+1;
get_time[2]=timeinfo->tm_mday;
get_time[3]=timeinfo->tm_hour;
get_time[4]=timeinfo->tm_min;
get_time[5]=timeinfo->tm_sec;
}
//把用户离线时间写入文本
void write_file()
{
FILE *fp*fp_backup;
struct local_info user_inforead_info;
int time_record[6]time_read[6]new_info=1;
char *read_user;
current_system_time(time_record);
user_info.year=time_record[0];
user_info.month=time_record[1];
user_info.day=time_record[2];
user_info.hour=time_record[3];
user_info.minute=time_record[4];
user_info.second=time_record[5];
strcpy(user_info.useruser);
fp=fopen(“/home/localhost/NetChat/NetChatClient/user_login_info““a+“);
fp_backup=fopen(“/home/localhost/NetChat/NetChatClient/user_login_info_backup““w+“);
if(fp==NULL)
{
printf(“不能打开文件!\n“);
exit(-1);
}
rewind(fp);
rewind(fp_backup);
//保证不同用户只出现一次
while(fread(&read_infosizeof(struct local_info)1fp))
{
if(strcmp(read_info.useruser))
{
fwrite(&read_infosizeof(struct local_info)1fp_backup);
}
else
{
new_info=0;
fwrite(&user_infosizeof(struct local_info)1fp_backup);
}
}
if(new_info)
{
fwrite(&user_infosizeof(struct local_info)1fp_backup);
}
if (rename(“/home/localhost/NetChat/NetChatClient/user_login_info_backup“
“/home/localhost/NetChat/NetChatClient/user_login_info“) != 0)
{
printf(“重命名出错!\n“);
}
fclose(fp);
fclose(fp_backup);
}
void destroy(GtkWidget *windowgpointer data)
{
flags=1;
close(sockfd);
write_file();
printf(“退出聊天\n“);
gtk_main_quit();
}
//显示在线人数
void conn_string(int countchar str[])
{
char num_string[20];
sprintf(num_string “ %d“ count);
strcat(strnum_string);
}
//把文本写入text控件里is_Show为1则为显示历史消息,否则为当前消息
void print_word(struct info_Text recv_infoconst char *local_userGtkTextBuffer *bufferint is_Show)
{
GtkTextIter startend;
char str[1024];
gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer)&start&end);
if(strcmp(recv_info.userlocal_user))//是否是自己的信息
{
sprintf(str“\t\t\t\t%d:%d:%d-%d:%d:%d\n%s\n\t\t%s\n“ recv_info.fun_Choose.date_Word_Record.year
recv_info.fun_Choose.date_Word_Record.monthrecv_info.fun_Choose.date_Word_Record.dayrecv_info.fun_Choose.date_Word_Record.hour
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-11-24 22:25 网络聊天(优化版)\
目录 0 2016-11-15 23:22 网络聊天(优化版)\NetChat\
目录 0 2016-11-19 12:40 网络聊天(优化版)\NetChat\NetChatClient\
文件 41837 2016-11-19 12:38 网络聊天(优化版)\NetChat\NetChatClient\CMP
文件 32318 2016-11-19 12:38 网络聊天(优化版)\NetChat\NetChatClient\NCCliLo
文件 6136 2016-11-19 12:38 网络聊天(优化版)\NetChat\NetChatClient\NCClientForLogin.c
文件 11286 2016-11-19 12:38 网络聊天(优化版)\NetChat\NetChatClient\chatMainPro.c
文件 579 2016-11-17 14:44 网络聊天(优化版)\NetChat\NetChatClient\mutualStructDef.h
文件 1359 2016-11-17 17:14 网络聊天(优化版)\NetChat\NetChatClient\socketInclude.h
文件 224 2016-11-19 12:40 网络聊天(优化版)\NetChat\NetChatClient\user_login_info
目录 0 2016-11-19 12:38 网络聊天(优化版)\NetChat\NetChatServer\
文件 30871 2016-11-19 12:38 网络聊天(优化版)\NetChat\NetChatServer\NCSM
文件 10573 2016-11-19 12:38 网络聊天(优化版)\NetChat\NetChatServer\NCServerMain.c
文件 509 2016-11-17 10:18 网络聊天(优化版)\NetChat\NetChatServer\mautulStructDef.h
文件 1388 2016-11-17 17:11 网络聊天(优化版)\NetChat\NetChatServer\socketInclude.h
文件 290 2016-11-24 22:26 网络聊天(优化版)\配置说明.txt
- 上一篇:VHDL时钟万年历设计
- 下一篇:地理信息系统名词解释大全
相关资源
- PCF8591 ad转换及lcd显示
- GTK编程设计音乐播放器
- 数据结构课程设计——商品货架管理
- Linux综合实验GTK+单词计算器
- DES算法实现报告实现加密以及解密的
- 订票信息管理系统
- 学生宿舍水电信息管理系统 C课程设计
- 基于51单片机的电器定时开关C程序
- 单项选择题标准化考试系统设计 代码
- 基于单片机的智能盆栽设计
- 走迷宫问题代码
- 四个开关流水灯
- 简单的火车票订票系统完整代码
- 水滴修改版,可用于kali 2019.2版本
- 易语言超高仿QQ聊天源码打造自己的局
- dos和bios开发讲解.pdf
- 从文件中读取矩阵,并实现转置
- 作业调度算法中文
- 大学课程中相关一些算法题
- VC 绘图库VCGraph-V20091123
- 基于单片机的体温呼吸检测系统设计
- 数据结构大作业
- GTK多线程聊天工具
- 利用栈实现括号匹配的检验
- 数据结构--员工管理系统
- 数据结构——图论
- GTK2指导手册中文
- minidwep-gtk-40420-ubuntu-64bit.deb
- 基于8255a的计算器
- 单片机和LCD1602实现的简易计算器
评论
共有 条评论