ACE6测试之ACE_SOCK_Stream2
来源:互联网 发布:网络错误-1003什么意思 编辑:程序博客网 时间:2024/05/13 12:59
Connect_to_server()方法使用类型为 ACE_SOCK_Connector 的连接器(connector_)来主动地建立连接。连接的设置通过调用连接器 connector_上的 connect()方法来完成:传入的参数为我们想要连接的机器的地址 remote_addr_,以及用于在其中建立连接的空 ACE_SOCK_Stream client_stream_。
远地机器在例子的运行时参数中指定。一旦 connect()方法成功返回,通过使用 ACE_SOCK_Stream 封装类中的 send()和recv()方法族,流就可以用于在新建立的链路上发送和接收数据了。
在此例中, 一旦连接建立好, send_to_server()方法就会被调用, 以将一个字符串发送 NO_ITERATIONS次到服务器。如前面所提到的,这是通过使用流包装类的 send()方法来完成的。
Client.h
#pragma once#include "ace/SOCK_Connector.h"#include "ace/INET_Addr.h"#include "ace/Log_Msg.h" ///ACE_DEBUG...#define SIZE_BUF 128#define NO_ITERATIONS 5class Client{public:Client(char *hostname,int port);int connect_to_server();int send_to_server();int close();~Client(void);private:ACE_SOCK_Stream client_stream_;ACE_INET_Addr remote_addr_;ACE_SOCK_Connector connector_;char *data_buf_;};Client.cpp
#include "Client.h"#include "ace/OS_NS_string.h" ///strlenClient::Client(char *hostname,int port):remote_addr_(port,hostname){data_buf_="hello from client";}Client::~Client(void){}int Client::connect_to_server(){ACE_DEBUG((LM_DEBUG,"(%P|%t) starting connect to %s:%d\n",remote_addr_.get_host_name(),remote_addr_.get_port_number()));if(connector_.connect(client_stream_,remote_addr_)== -1){ACE_ERROR_RETURN((LM_ERROR,"%P|%t %p\n","connection failed"),-1);}else{ACE_DEBUG((LM_DEBUG,"(%P|%t) connect to %s\n",remote_addr_.get_host_name()));}return 0;}int Client::send_to_server(){for(int i=0; i<NO_ITERATIONS; i++){if(client_stream_.send_n(data_buf_,ACE_OS::strlen(data_buf_)+1,0)== -1){ACE_ERROR_RETURN((LM_ERROR,"(%P|%t) %p\n","send_n"),0);break;}}close();}int Client::close(){if(client_stream_.close()== -1)ACE_ERROR_RETURN((LM_ERROR,"(%P|%t %p\n)","close"),-1);elsereturn 0;}main.cpp
#include <QtCore/QCoreApplication>#include "ace/OS_NS_stdlib.h" ///ACE_OS::exit,atoi#include "Client.h"int main(int argc, char *argv[]){QCoreApplication a(argc, argv);if(argc<3){ACE_DEBUG((LM_DEBUG,"Usage %s <hostname> <port_number>\n",argv[0]));ACE_OS::exit(1);}Client client(argv[1],ACE_OS::atoi(argv[2]));client.connect_to_server();client.send_to_server();return a.exec();}Tianzimk摘自ACE程序员教程
- ACE6测试之ACE_SOCK_Stream2
- ACE6测试之ACE_SOCK_Stream
- ACE6.3编译
- VS2010安装ACE6.3.0
- Fedora 17 安装 ACE6.1
- linux下编译安装ACE6
- 资源:ace6.0和xmlrpc++0.7
- linux下编译安装ACE6.3.1
- ACE6.3.1 vs2010搭建ACE开发环境
- ACE6.3.3 在Linux上的安装
- 【测试】测试之道
- ACE6.0的安装_出错处理_检验
- Linux系统下如何编译ACE6.1.5版本
- ACE6.2.0在vs2010上编译运行(win7)
- centos6.5编译安装ACE6.3.4静态库
- 【性能测试】Jmeter测试之接口测试
- 软件测试之App测试-UI测试
- 软件测试之App测试-功能测试
- Innodb 锁机制
- S4上搞定google play
- could not find action or result
- Oracle存储过程
- iOS开发中使用[[UIApplication sharedApplication] openURL:]加载其它应用
- ACE6测试之ACE_SOCK_Stream2
- 业余横拍进化(-)----正手拉球
- ORACLE函数库大全
- Java 获取本周,本月的开始和结束日期
- 用查表发进行进制转换
- ’string‘ does not name a type
- switch case 语句
- Android自定义组件(2)
- Code Fragment-重构行数比较多的大方法。