300分ACE高手来拿(改好再加200)
#include "stdafx.h"
#define _WIN32_WINNT 0x0510
#include <ace/OS.h>
#include <ace/Reactor.h>
#include <ace/SOCK_Connector.h>
#include <string>
#include <iostream>
using namespace std;
#pragma comment(lib,"aced.lib")
class MyClient:public ACE_Event_Handler
{
public:
bool open(ACE_INET_Addr addr)
{
ACE_SOCK_Connector connector;
ACE_Time_Value timeout(5,0);
if(connector.connect(peer,addr,&timeout) != 0)
{
cout<<endl<<"connecetd fail";
return false;
}
cout<<endl<<"connecetd ";
char *a="caca";
//一次发送
peer.send(a,5);
//两次发送
peer.send(a,5);
//注册读事件
ACE_Reactor::instance()->register_handler(this,ACE_Event_Handler::READ_MASK);
return true;
}
ACE_HANDLE get_handle(void) const
{
return peer.get_handle();
}
int handle_input (ACE_HANDLE fd)
{
int rev=0;
ACE_Time_Value timeout(5,0);
if((rev=peer.recv(buffer,1000,&timeout))>0)
{
buffer[rev]='\0';
cout<<endl<<"rev:\t"<<buffer<<endl;
return 3;
}
else
{
return -1;
}
}
virtual int handle_close (ACE_HANDLE handle, ACE_Reactor_Mask close_mask)
{
if (this->peer.get_handle () == ACE_INVALID_HANDLE)
{
ACE_Reactor_Mask m = ACE_Event_Handler::DONT_CALL;
this->reactor ()->remove_handler (this, m);
this->peer.close ();
}
return 0;
}
private:
ACE_SOCK_Stream peer;
char buffer[1024];
};
int main(int argc, char *argv[])
{
ACE_INET_Addr addr1(3000,"127.0.0.1");
ACE_INET_Addr addr2(3001,"127.0.0.1");
ACE_INET_Addr addr3(3002,"127.0.0.1");
MyClient *client1 = new MyClient;
client1->reactor(ACE_Reactor::instance());
client1->open(addr1);
MyClient *client2 = new MyClient;
client2->reactor(client1->reactor());
client2->open(addr2);
MyClient *client3 = new MyClient;
client3->reactor(client1->reactor());
client3->open(addr3);
while(true)
{
ACE_Reactor::instance()->handle_events();
}
return 0;
}
连接三个服务器,发两次数据给各个服务器,为什么只能收到每个服务器一次的返回信息就阻塞掉了?
谁给改改,我要的效果是只有服务器主动关闭,客户端才不接受数据。