利用boost:asio写的简单聊天服务器一
来源:互联网 发布:手机淘宝淘口令怎么用 编辑:程序博客网 时间:2024/06/11 05:03
前几天接到老大一个学习实践任务——编写简单的聊天服务器,我对网络编程和boost库不太熟悉,临时抱佛脚写了一个服务端和测试客户端,进过测试可以完成聊天的基本功能,但是还有很多不足,比如客户端输入消息的格式容错不强,没有对客户端长消息的处理等等,也希望大牛们能多提意见。
对客户端的格式有些许要求,大致如下:
1. ./chatClient user:注册用户名(注册成功后会显示当前已在服务器注册的用户名称,不成功,按照“user:注册用户名”格式重新注册)
2. To:用户名称 消息内容(用户名和消息内容之间空格不可少,回车键发送消息)
3. To:all 消息内容(向所以注册客户端发送消息)
4. quit+回车 退出客户端
一、服务器源代码代码
1.IoServiceThread.cpp
#include <iostream>#include "IoServiceThread.h"using namespace std;CIoServiceThread::CIoServiceThread(){}CIoServiceThread::~CIoServiceThread(){}void CIoServiceThread::Start(){cout<<"CIoServiceThread::Start()"<<endl; m_work=new boost::asio::io_service::work(m_ioService); m_thread=boost::thread(boost::bind(&boost::asio::io_service::run,&m_ioService)); }void CIoServiceThread::Stop(){ delete m_work; m_thread.join(); m_ioService.reset();}
2. IoServiceManager.cpp
#include "IoServiceManager.h"#include <iostream>using namespace std;CIoServiceManager* CIoServiceManager::sm_instance = NULL;CIoServiceManager* CIoServiceManager::Instance(){ if(sm_instance==NULL) sm_instance=new CIoServiceManager; return sm_instance;}CIoServiceManager::CIoServiceManager(): ppThreads(NULL), m_thread(0), m_index(0), m_running(false){}void CIoServiceManager::Start(int nThread){cout<<"CIoServiceManager::Start(), nThread = "<<nThread<<endl; boost::lock_guard<boost::mutex> guard(m_mut); if(m_running==false) { m_running=true; m_thread=nThread; ppThreads=new CIoServiceThread*[m_thread]; for(int i=0;i<m_thread;i++) { CIoServiceThread* pThread = new CIoServiceThread; ppThreads[i]=pThread; pThread->Start(); } }}void CIoServiceManager::Stop(){ boost::lock_guard<boost::mutex> guard(m_mut); if(m_running) { m_running=false; for(int i=0;i<m_thread;i++) { CIoServiceThread* pThread=ppThreads[i]; pThread->Stop(); delete pThread; } }}boost::asio::io_service& CIoServiceManager::GetIoService(){cout<<"CIoServiceManager::GetIoService()"<<endl; int i=(m_index++)%m_thread; CIoServiceThread * pThread=ppThreads[i]; return pThread->GetIoService();}
以上类主要是进行开启io多线程,每个线程执行io_service::run(). 待续...
- 利用boost:asio写的简单聊天服务器一
- 利用boost:asio写的简单聊天服务器二
- 利用boost:asio写的简单聊天服务器三
- 利用boost:asio写的简单聊天服务器四
- 利用boost::asio实现一个简单的服务器框架
- Boost::Asio一个简单的Echo服务器
- boost::asio一个简单的echo服务器
- Boost::Asio一个简单的Echo服务器
- Boost::Asio一个简单的Echo服务器
- boost::asio一个简单的echo服务器
- 基于Boost.asio的简单一对一同步聊天程序
- 如何使用boost.asio写一个简单的通信程序(一)
- 简单的Boost::asio 高性能C/S服务器模型
- 基于boost::asio封装搭建的简单服务器
- Boost.Asio学习之简单的HTTP服务器
- boost asio的异步服务器
- Muduo 网络编程示例之二:Boost.Asio 的聊天服务器
- boost::asio学习之[六]简单聊天程序
- CSS 常用集锦(1)div+css文字垂直居中(转载)
- 计算视图大小(measure)的过程
- 【Android】不使用WebView来执行Javascript脚本(Rhino)
- molloc的一种使用
- VC在Windows下获取特殊路径目录
- 利用boost:asio写的简单聊天服务器一
- 数组的分类以及应用
- cocos2d-x封神榜(2) -- 【精灵的八面玲珑】
- 关于C#中get和set(转)
- 为什么要关闭数据库连接,可以不关闭吗?
- JAVA中的Set集合类
- WPF 国际化具体实现步骤
- 如果爱
- 只有脑子坏了才会用中国移动的4G