资源简介
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图形编辑器源代码
- DES加密码算法MFC类实现
- 人事管理系统(使用MFC单文档程序,
- mfc实现定时关机、延时关机
- MFC 实现的坦克大战
- Kinectv2 __MFC
- 移动的球体MFC制作
- MFC网络对战TCP五子棋
- 基于C++的简易FTP服务/客户端源码
- MFC程序设计,使用鼠标画图程序,包
- D2D显示图片(MFC)
- MFC gridctrl表格控件的简单
- STK与VC++ 6.0联合编程
- VC++MFC串口调试助手完整编辑过程介绍
- 20C++MFC课程设计之吹泡泡游戏
- 重写MFC treectrl控件的一个
- Drcom账号密码读取
- 图书管理系统MFC+SQL+VC
- mfc 物业管理系统
- MFC用树控件制作简单通讯录
- 鼠标左键准确定位MFC基于对话框的滑
- 鼠标左键准确定位MFC基于对话框的滑
- vc++ mfc 基于udp协议在不同ip地址之间
- 基于MFCVC6.0的简单计算器程序
- Visual C++程序设计与应用教程课后习题
- MFC实时网络连接装状况监测代码
- VC++基于mfc 实现对话框打开读取txt文件
- 巴特沃斯低通滤波器的MFC程序
- MFC创建UI线程
- mfc矩阵运算器
评论
共有 条评论