小小聊天室

简介:

//============================================================================
// Name        : Serv.cpp
// Author      : archy
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include "ace/SOCK_Connector.h"
#include "ace/SOCK_Acceptor.h"
#include "ace/SOCK_Stream.h"
#include "ace/INET_Addr.h"
#include "ace/Addr.h"
#include "pthread.h"
#include <map>

using namespace std;

std::map<int,ACE_SOCK_Stream *> clientMap;

void *process_client(void* peer)
{

    ACE_TCHAR buf[64] = {0};
    int length = 0;

    while((length = static_cast<ACE_SOCK_Stream *>(peer)->recv(buf,64)) != -1)
    {

        buf[length] = '\0';

        for(std::map<int,ACE_SOCK_Stream *>::iterator iter = clientMap.begin();
                iter != clientMap.end();
                    iter ++)
        {
            if(iter->second == peer)
            {
                continue;
            }
            iter->second->send_n(buf,length);
        }
        printf("recv string %s\n",buf[4]);
    }
    static_cast<ACE_SOCK_Stream *>(peer)->close();
    return 0;
}

int main()
{
    ACE_INET_Addr port_to_listen(50000,ACE_LOCALHOST);
    ACE_SOCK_Acceptor acceptor;
    ACE_INET_Addr peer_addr;

    if(-1 == acceptor.open(port_to_listen,1))
    {
        printf("error accept open\n");
        return -1;
    }

    ACE_SOCK_Stream *peer;

    while(true)
    {
        peer = new ACE_SOCK_Stream();
        if(-1 == acceptor.accept((*peer),&peer_addr))
        {
            printf("error acceptor accept\n");
            return -1;
        }
        else
        {
            pthread_t pid;
            ACE_TCHAR addr[64] = {0};
            peer_addr.addr_to_string(addr,64);
            printf("connection from %s\n",addr);
            pthread_create(&pid,0,process_client,static_cast<void *>(peer));
            clientMap[(int)peer_addr.get_port_number()] = peer;
        }
    }

    return 0;
}



//============================================================================
// Name        : Cli.cpp
// Author      : archy
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include "ace/INET_Addr.h"
#include "ace/SOCK_Connector.h"
#include "ace/SOCK_Acceptor.h"
#include "ace/SOCK_Stream.h"
#include "pthread.h"
using namespace std;

void* list_recv(void* peer)
{
    char buf[64] = {0};
    int length = 0;
    while((length = static_cast<ACE_SOCK_Stream *>(peer)->recv(buf,64)) != -1)
    {
        buf[length] = '\0';
        printf("rev string %s\n",buf);
    }
    return 0;
}

int main()
{
    ACE_INET_Addr ser_addr(50000,ACE_LOCALHOST);
    ACE_SOCK_Connector connector;
    ACE_SOCK_Stream *peer = new(std::nothrow) ACE_SOCK_Stream();
    if(peer == NULL)
    {
        return -1;
    }
    if(connector.connect(*peer,ser_addr) == -1)
    {
        cout <<" connect error! "<< endl;
        return -1;
    }


    char buf[64] = "start";
    pthread_t pid;
    pthread_create(&pid,0,list_recv,static_cast<void *>(peer));
    while(gets(buf))
    {
        if(strlen(buf) == 0)
        {
            continue;
        }
        (*peer).send_n(buf,strlen(buf));
        //peer.recv(buf,64);
    }
    peer->close();
    printf("rev string %s\n",buf);
    return 0;
}


相关文章
|
消息中间件 缓存 算法
中间件数据一致性
【7月更文挑战第23天】
237 58
|
XML 存储 缓存
Squid 缓存服务器配置
Squid 缓存服务器配置
552 0
|
存储 Kubernetes 负载均衡
K8S基础篇:概念与架构
**Kubernetes** 是一个可移植的、可扩展的开源平台,用于**管理容器化的工作负载和服务,可促进声明式配置和自动化**。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用
567 2
K8S基础篇:概念与架构
|
数据可视化
QChart多个图布局使坐标轴对齐的方法
QChart多个图布局使坐标轴对齐的方法
500 0
|
Java Nacos 开发工具
微服务轮子项目(16) -Alibaba Sentinel限流熔断(使用示例)
微服务轮子项目(16) -Alibaba Sentinel限流熔断(使用示例)
321 0
|
Python
python股票量化交易(15)---使用pyqt5构建股票交易北向资金
python股票量化交易(15)---使用pyqt5构建股票交易北向资金
717 0
python股票量化交易(15)---使用pyqt5构建股票交易北向资金
|
存储 新零售 弹性计算
心动《另一个伊甸》从Amazon DynamoDB迁移MongoDB
阿里云MongoDB提供了很好的保障和性能,使我们的业务成本有了明显的下降
心动《另一个伊甸》从Amazon DynamoDB迁移MongoDB
|
机器学习/深度学习 算法
|
消息中间件 Java Linux