资源简介
群聊模式采用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时钟万年历设计
- 下一篇:地理信息系统名词解释大全
相关资源
- Qt局域网聊天软件
- MP3文件ID3v2ID3v2APEv2标签读取
- 课程作业:模拟仓库管理系统
- 一个简单实用个人日记管理系统
- 带时间温度显示的室内灯光控制系统
- 成绩管理系统(数据结构)
- GTK实现数字表显示
- FIR低通滤波器 ccs运行环境
- 飞秋FeiQ 兼容qq和飞鸽传书功能
- 基于GTK的Linux环境下的简易任务管理器
- C malloc函数用法
- 嵌入式局域网聊天系统客户端
- 算法竞赛入门经典 第2版刘汝佳+高清
- 基于单片机的GPS定位及显示系统设计
- 链表实现通讯录管理系统
- PowerShell-6.2.1-win-x86.zip
- pl/0编译器 语法分析
- 源程序阅读与调试课程设计报告--学生
- 谁说程序员不浪漫?!基于easyX图形库
- 编译原理课设c编译器
- GG2014版源码。仿QQ聊天软件
- 飞机大战PlaneWar,Linux下gtk开发。
- linux 操作系统 GTK /proc文件 系统监视器
- MCP3421 STM32 Driver
- ADS1100 STM32 Driver
- 单片机89c52与MLX90614红外的测温程序
- stm32f103AES加密 cbc模式
- 单片机 点阵 字模提取软件
- C高级编程讲义-传智播客
- NOIP必学内容之前缀和与差分颜鸿宇
评论
共有 条评论