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程序员教程

原创粉丝点击