• 大小: 43KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: C/C++
  • 标签: 多人聊天  聊天室  

资源简介

1、 提供多人连接到服务器同时聊天 2、 用户名可重复 3、 用户之间可以私聊 4、 用户进入和离开聊天室时,其他用户得到通知

资源截图

代码片段和文件信息

// ChatServer1.cpp: implementation of the CChatServer class.
// Download by http://www.NewXing.com
//////////////////////////////////////////////////////////////////////

#include “stdafx.h“
#include “ChatServer.h“

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CChatServer::CChatServer()
{
m_cmd.SetType(this);

m_cmd.SetLoginFunc(LoginFunc);
m_cmd.SetUserMessageFunc(UserMessageFunc);

InitializeCriticalSection(&m_cs);
}

CChatServer::~CChatServer()
{
DeleteCriticalSection(&m_cs);
}

BOOL CChatServer::ClientExit(LPCLIENTCONTEXT lpContext)
{
CoInitialize(NULL); 

LPUSERINFO lpUser;
if(!m_mapUsers.Lookup((LONG)lpContext lpUser))
{
//找不到该用户说明已经用户已经退出了
CoUninitialize(); 
return TRUE;
}


EnterCriticalSection(&m_cs);
m_mapUsers.RemoveKey((LONG)lpContext);
LeaveCriticalSection(&m_cs);

//发送退出的用户名称给其他用户
CString strCmd = m_cmd.CreateUserLogout(*lpUser);
printf(“%s LEAVE\n“ lpUser->m_name);
delete lpUser;


POSITION pos = m_mapUsers.GetStartPosition();
for(;pos!=NULL;)
{
LPUSERINFO lpUser;
LONG  pContext;
m_mapUsers.GetNextAssoc(pos  pContext lpUser);
Send((LPCLIENTCONTEXT)pContext strCmd);
}

CoUninitialize(); 
return FALSE;

}

void CChatServer::ProcessReceiveData(LPCLIENTCONTEXT lpContext CBuffer &buffer)
{
CoInitialize(NULL); 

try
{
//循环取得有效指令
CString strxml;
while(m_cmd.HasNetPacket(buffer strxml))
{
if(!m_cmd.DoProcessNetPacket((LONG)lpContext strxml))
{
printf(“Error xml format: %s\n“ (LPCSTR)strxml);
}
}
}
catch(_com_error &e)
{
printf(“%s“ (char *)e.Description());
}

CoUninitialize(); 

}

void CChatServer::LoginFunc(USERINFO &user)
{
//用户登陆
//将用户信息发送给用户以及将服务器上用户列表发送给用户
sprintf(user.m_ip ((LPCLIENTCONTEXT)(user.m_id))->m_ip);
user.m_nPort = ((LPCLIENTCONTEXT)(user.m_id))->m_nPort;
CString strCmd = m_cmd.CreateLoginSuccess(user &m_mapUsers);

Send((LPCLIENTCONTEXT)user.m_id strCmd);

//将新用户发送所有他用户
strCmd = m_cmd.CreateNewUser(user);

POSITION pos = m_mapUsers.GetStartPosition();
for(;pos!=NULL;)
{
LPUSERINFO lpUser;
LONG  lpContext;
m_mapUsers.GetNextAssoc(pos  lpContext lpUser);

if( user.m_id != (DWORD)lpContext)
{
Send((LPCLIENTCONTEXT)lpContext strCmd);
}
}

//添加到列表
EnterCriticalSection(&m_cs);
m_mapUsers[user.m_id] = &user;
LeaveCriticalSection(&m_cs);
}

//发送某用户的发言其他用户:区别私聊
void CChatServer::UserMessageFunc(USERINFO &userSrcUSERINFO &userDestCString strSpeak)
{
if(userDest.m_id == 0)
{
CString strCmd = m_cmd.CreateUserMessage(userSrc userDest strSpeak);

//发送给所有用户
POSITION pos = m_mapUsers.GetStartPosition();
for(;pos!=NULL;)
{
LPUSERINFO lpU

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    .......      1633  2004-02-14 16:13  www.NewXing.com\ChatServer\ReadMe.txt

    .......      3597  2004-02-16 14:38  www.NewXing.com\Chatter\ReadMe.txt

    .......     34816  2009-07-23 13:58  www.NewXing.com\程序文档.doc

     文件       1234  2013-12-02 04:34  www.NewXing.com\Include\Buffer.h

     文件       1058  2013-12-02 04:34  www.NewXing.com\ChatServer\ChatServer.h

     文件       1594  2013-12-02 04:34  www.NewXing.com\Chatter\Chatter.h

     文件       2491  2013-12-02 04:34  www.NewXing.com\Chatter\ChatterDlg.h

     文件       2476  2013-12-02 04:34  www.NewXing.com\Chatter\ChatterMgr.h

     文件       5200  2013-12-02 04:34  www.NewXing.com\Include\ClientCommand.h

     文件       1358  2013-12-02 04:34  www.NewXing.com\Chatter\ClientSocket.h

     文件       1359  2013-12-02 04:34  www.NewXing.com\Chatter\ConnectDlg.h

     文件        625  2013-12-02 04:34  www.NewXing.com\Chatter\FileTransfer.h

     文件       3546  2013-12-02 04:34  www.NewXing.com\ChatServer\IOCPServer.h

     文件       1254  2013-12-02 04:34  www.NewXing.com\Chatter\ListCtrlEx.h

     文件       1245  2013-12-02 04:34  www.NewXing.com\Chatter\LoginDlg.h

     文件        489  2013-12-02 04:34  www.NewXing.com\ChatServer\Resource.h

     文件       1549  2013-12-02 04:34  www.NewXing.com\Chatter\Resource.h

     文件       4979  2013-12-02 04:34  www.NewXing.com\Include\ServerCommand.h

     文件       1140  2013-12-02 04:34  www.NewXing.com\Chatter\StdAfx.h

     文件       1144  2013-12-02 04:34  www.NewXing.com\ChatServer\StdAfx.h

     文件       1338  2013-12-02 04:34  www.NewXing.com\Chatter\TransferProgress.h

     文件        801  2013-12-02 04:34  www.NewXing.com\Include\User.h

     文件        723  2013-12-02 04:34  www.NewXing.com\Chatter\Waiting.h

     文件       4775  2013-12-02 04:34  www.NewXing.com\Include\xmlCommand.h

     文件       5235  2013-12-02 04:34  www.NewXing.com\Include\Buffer.cpp

     文件       3589  2013-12-02 04:34  www.NewXing.com\ChatServer\ChatServer.cpp

     文件       3792  2013-12-02 04:34  www.NewXing.com\Chatter\Chatter.cpp

     文件       9493  2013-12-02 04:34  www.NewXing.com\Chatter\ChatterDlg.cpp

     文件       7225  2013-12-02 04:34  www.NewXing.com\Chatter\ChatterMgr.cpp

     文件       1556  2013-12-02 04:34  www.NewXing.com\Chatter\ClientSocket.cpp

............此处省略29个文件信息

评论

共有 条评论