利用boost:asio写的简单聊天服务器一

原创 2013年12月05日 14:34:30

前几天接到老大一个学习实践任务——编写简单的聊天服务器,我对网络编程和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 异步TCP服务器框架

Boost Asio 异步TCP服务器框架 flyfish 2015-5-30 session 类 头文件 #pragma once #include #include #include ...

Boost::asio范例分析 服务端

main函数要求程序调用者传递3个参数:服务器IP地址,端口号和文档根目录.其中IP地址可以是IPv4或IPv6格式.接着创建server对象实例,将传递进来的IP地址,端口号,文档根目录作为serv...

Boost::asio范例分析 服务端线程池实现

在http范例的server2实现中引入了线程池,server2的业务逻辑实现与server1相似.这里只分析与线程池有关的代码.   main函数中添加了一个额外的参数指定线程池大小.并在serv...

C++ 建立本地网络服务器 (Boost.Asio库)

详细的注释讲解利用Boost库建立服务器,最终自己也写了一个具有并发功能的boost服务器,可供直接调用。

boost::asio编写的异步服务器和客户端

客户端 #include #include #include #include #include #include #include #include #include #include ...

TCP协议下多个客户端向服务器发出消息

服务器端 public class Server { public static void main(String[] args) { try { S...

利用boost:asio写的简单聊天服务器四

二、客户端源代码 1. ChatClient.cpp (客户端main) #include #include #include #include #include #include ...

利用boost:asio写的简单聊天服务器三

一、服务器端源代码 5. Server.cpp  (侦听端口,接收连接,创建新CCnection) #include "Server.h" #include "ConnectionManager....

Muduo 网络编程示例之二:Boost.Asio 的聊天服务器

这是《Muduo 网络编程示例》系列的第二篇文章。 本文讲介绍一个与 Boost.Asio 的示例代码中的聊天服务器功能类似的网络服务程序,包括客户端与服务端的 muduo 实现。这个例子的主要目的是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)