用ACE库实现服务器
来源:互联网 发布:单色led显示屏软件 编辑:程序博客网 时间:2024/05/07 15:34
使用ACE搭建服务器主要用到这几类:
- ACE_SOCK_Connector:连接器,主动建立连接,用于Socket Client。
- ACE_SOCK_Acceptor:接受器,被动建立连接,用于Socket Server。
- ACE_SOCK_Stream:传输数据的流,用于传输数据。
- ACE_INET_Addr:用于表示通信端点的地址。
ACE_SOCK_Acceptor::open(svc_addr,1) 服务器创建socket绑定自身端口和ip
ACE_SOCK_Acceptor::accept(svc_stream,&cli_addr) 服务器创建消息队列并监听,有客户端请求连接三次握手后接受请求
ACE_SOCK_Stream::recv(buffer,buff_size)把接受到的数据放到buff中,循环读取
ACE_SOCK_Stream::close()关闭接收流
ACE_SOCK_Acceptor::close()关闭服务器
#include <ace/Log_Msg.h>#include<ace/SOCK_Acceptor.h>#include<ace/SOCK_Stream.h>#include<ace/SOCK_Connector.h>#include<ace/INET_Addr.h>#define MAX_BUFF_SIZE 1024#define LISTEN_PORT 5010#define SERVER_IP ACE_LOCALHOSTclass server{public:server(int port,char *ip);~server();bool open();bool run();void close();ACE_SOCK_Stream &get_stream();private:ACE_INET_Addr Svr_addr,Cli_addr;ACE_SOCK_Acceptor Svr_aceept;ACE_SOCK_Stream Svr_stream;};server::server(int port,char *ip):Svr_addr(port,ip){};server::~server(){};bool server::open(){if(Svr_aceept.open(Svr_addr,1)==-1){ACE_DEBUG((LM_ERROR,ACE_TEXT("failed to accept\n")));return false;}return true;}bool server::run(){if(Svr_aceept.accept(Svr_stream,&Cli_addr)==-1){ACE_DEBUG((LM_ERROR,ACE_TEXT("failed to accept\n")));Svr_aceept.close();return false;}return true;}ACE_SOCK_Stream &server::get_stream(){return this->Svr_stream;}void server::close(){Svr_aceept.close();}int main(){server svr(LISTEN_PORT,(char*)SERVER_IP);char strBuffer[MAX_BUFF_SIZE];if(!svr.open()){return 0;}ACE_DEBUG((LM_INFO, ACE_TEXT("open success!\n")));if(!svr.run()){return 0;}ACE_DEBUG((LM_INFO, ACE_TEXT("run success!\n")));ACE_SOCK_Stream Svr_data = svr.get_stream();while(1){ int byte = Svr_data.recv(strBuffer,MAX_BUFF_SIZE); if (-1 == byte) { ACE_DEBUG((LM_INFO, ACE_TEXT("receive data failed\n"))); break; } else if(0 == byte) { ACE_DEBUG((LM_INFO, ACE_TEXT("client closed!\n"))); break; } else { ACE_DEBUG((LM_INFO, ACE_TEXT("receive from client: %s\n"),strBuffer)); ACE_OS::memset(strBuffer, 0, sizeof(strBuffer)); } } Svr_data.close(); svr.close(); return 0;}
开启服务器后:
#nc -v localhost 5010
连接到服务器测试
阅读全文
0 0
- 用ACE库实现服务器
- 用ACE写网络服务器
- 采用C++的ACE库实现的一个通用的udp通信服务器程序
- 用ACE从Web服务器抓数据
- 用ACE从Web服务器抓数据
- ace第二课-- 一个日志服务器的实现
- ACE网络编程 一个日志服务器的实现
- ACE开发游戏服务器
- ACE开发游戏服务器
- ACE日志服务器
- ace 反应式服务器例子
- ACE多线程服务器
- 用ACE实现生产者与消费者模式
- 用ACE实现简易Echo Server
- 用ACE实现生产者消费者模式
- 用 ACE Framework 实现进程间通信
- 用ACE实现生产者-消费者模式
- ACE库
- CSS总结
- D3D11的像素裁剪
- Java异常机制中的问题
- SSL P2667 呵呵
- Servlet
- 用ACE库实现服务器
- 《深入理解Java虚拟机》——垃圾收集器与内存分配策略问题
- 机器学习-推荐系统
- 工作总结
- linux_1.0_环境配置
- HDOJ2032(杨辉三角)
- python基础笔记2-字符串处理函数
- mina框架CumulativeProtocolDecoder.doDecode方法浅析
- 三维计算机视觉(一)--点云处理综述