资源简介
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\xm
文件 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个文件信息
- 上一篇:操作系统进程调度模拟算法
- 下一篇:一元多项式的运算加减乘终极版
相关资源
- Qt TCP聊天室demo
- MFC多人聊天室
- Windows+C语言构建网络聊天室内含源程
- MFC聊天室含源代码.rar
- P2P 聊天室 c++ 版本 附详细文档
- vc++课程设计——聊天室
- C++做的一个聊天室程序
- vc-基于MFC编程,使用TCP/IP模型编写
- c++实现语音聊天室
- 计算机网络实验设计---基于TCP的网络
- VC+++聊天室程序设计
- TCP/IP实现 简易聊天室 C++
- VC++局域网聊天室完整版
- VC++ socket 聊天室客户端
- C++ MFC 编写的聊天室软件源码
- VC++多人聊天室
- 计算机网络实验-----基于TCP的网络聊天
- socket编程聊天室C++
- MFC 聊天室 高级
- 基于TCP的网络聊天室的设计一步一步
- vc6.0实现的局域网聊天室MFC+SOCKRT
- MFC TCP/IP 网络 多人聊天室
- 多人聊天室 C++
- MFC局域网聊天室C++
- 基于TCP的网络聊天室的设计
- 基于MFC的聊天室网络socket
- 基于MFC基本对话框的CSocket局域网通信
- 基于MFC的简单网络聊天室
- C++ CAsyncSocket类聊天室程序
- C++聊天室(MFC实现)
评论
共有 条评论