• 大小: 24KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: C/C++
  • 标签: MFC  

资源简介

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


评论

共有 条评论