资源简介
MFC 实现聊天功能

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 2345 //端口号
#define MAXDATASIZE 1024 //传输结构体数据域最大字节
typedef struct
{
int flag;
char name[10];
//char sex;
char password[20];
}REGMESSAGE;
typedef struct msgNode
{
char attrstr[56];
char msgstr[56];
struct msgNode *next;
}msgNode*msgList;
typedef struct dNode{
int type;
int src_client_fd;
int des_client_fd;
char buf[MAXDATASIZE];
}dataNode*dataPtr;
typedef struct QNode
{
dataNode data;
struct QNode *next;
}QNode*QueuePtr;
typedef struct
{
QueuePtr front;//队头指针
QueuePtr rear;//队尾指针
}linkQueue;
/* 定义全局变量*/
//客户端信息
int sockfd;
int myfd;
char myname[10];
//标志
int insetflag = 0;//发送参数设置
int wrlockflag = 0;//队列写锁
//时间变量
time_t timep;
//所有窗口指针
WINDOW *inputWin*inputMsgWin*inputDesWin*inputTypeWin*inputCallWin;
WINDOW *msgWin*msgCntWin;
WINDOW *userListWin*userListCntWin;
msgList mlist;//消息链表指针
linkQueue sendQueuerecvQueue;//接受 发送队列
/* 初始化队列 */
void InitQueue(linkQueue *Q)
{
Q->front = (QueuePtr)malloc(sizeof(QNode));
Q->rear = Q->front;
Q->front->next = NULL;
//Q.rear->next = NULL;
}
/* 队列 数据入列 */
void EnQueue(linkQueue *QdataNode e)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
p->data.type = e.type;
p->data.src_client_fd = e.src_client_fd;
p->data.des_client_fd = e.des_client_fd;
memcpy(p->data.bufe.bufMAXDATASIZE);
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
}
/* 队列 数据出列 */
void DeQueue(linkQueue *QdataNode *e)
{
QueuePtr p;
p = Q->front->next;
e->type = p->data.type;
e->src_client_fd = p->data.src_client_fd;
e->des_client_fd = p->data.des_client_fd;
memcpy(e->bufp->data.bufMAXDATASIZE);
Q->front->next = p->next;
if(Q->rear == p)
Q->rear=Q->front;
free(p);
}
/* 判断队列是否为空 */
int EmpQueue(linkQueue Q)
{
if(Q.front == Q.rear)
return 1;
else
return 0;
}
/* 初始化消息内容无头结点循环链表,长度为8结点 */
void msgList_init(void)//
{
msgNode *p*s;
mlist = NULL;
int i;
for(i = 0; i < 8; i++)
{
p = (msgNode *)malloc(sizeof(msgNode));
strcpy(p->attrstr““);
strcpy(p->msgstr““);
p->next = NULL;
if(i == 0)
{
mlist = p;
s = mlist;
}
else
{
s->next = p;
s = s->next;
}
}
s->next = mlist;
}
/* 更新消息链表,mlist指向最先收到的消息 */
void msgList_updata(char* attrchar *msg)
{
strcpy(mlist->attrstrattr);
strcpy(mlist->msgstrmsg);
mlist = mlist->next;
}
/* 获取时间函数 */
void gettime(char *str)
{
struct tm *p;
time(&timep);
p = gmtime(&timep);
sprintf(str“%02d:%02d:%02d“p->tm_hour+8p->tm_minp->tm_sec);
}
/* 修改提示信息 */
void setcall(int num)
{
char callstr[58];
wclear(inputCallWin);
switch(num)
{
case 1: //输入消息
strcpy(callstr“提示:请输入消息,按Enter键发送!Ctrl+C更改发送参数!“);
break;
case 2: //输入消息 错误信息
strcpy(callstr“错误:消息为空请重新输入!Ctrl+C更改发送参数!“)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 15893 2010-09-15 09:56 M\client
文件 12617 2010-09-15 09:55 M\client.c
文件 12617 2010-09-15 09:55 M\client.c~
文件 10157 2010-09-15 09:56 M\server
文件 7904 2010-09-15 08:08 M\server.c
文件 7900 2010-09-15 08:08 M\server.c~
文件 4 2010-09-14 16:43 M\test.c~
目录 0 2010-09-15 13:19 M
----------- --------- ---------- ----- ----
67092 8
- 上一篇:c++ socket类封装(udp/tcp)
- 下一篇:C++实现的JPEG压缩算法
相关资源
- 基于MFC的TCP调试助手源码95706
- 基于mfc的多线程文件传输
- MFC数字钟(基于VC6.0)
- VC++MFC小游戏实例教程(实例)+MFC类库
- ChartCtrl控件库(可在VS2019中使用)
- 商品库存管理系统 C++ MFC
- mfc 调用redis
- MFC视频播放器源码(支持avi/wma/mp3等格
- mfc绘图大全(画直线、矩形、椭圆)
- MFC控件重绘
- hook,捕获所有案件,查找所有窗口,
- (学习)VS2010之MFC入门到精通教程
- MFC文档_视图_框架_模板结构体系深入
- 简单员工管理系统(适合初学MFC)
- MFC五子棋游戏
- MFC UDP编程
- MFC的异步网络通讯应用程序
- C++MFC模块讲解,黑发程序员课程整理
- 一个简单而强大的基于MFC的web server源
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- MFCaccess.rar
- VC++MFC课程设计的学生成绩管理系统
- MFC 日历控件 万年历 Calendar自绘
- CrystalDiskInfo-HDD/SSD硬盘信息,SMART信息
- MFC自定义界面HUI,高效简单,含详细
- 仿射密码-Affine cipher
- c++MFC车牌自动识别定位,只能定位和
- mfc+sql 酒店客房管理系统
- 基于图割的图像分割OpenCV+MFC实现
- MFC绘制Bezier曲线B样条曲线曲线拟合
评论
共有 条评论