rocmike 发表于 2008-2-20 17:25:52

入门者求教:怎样用ACE实现一个客户端的多个socket连接?

ACE刚入门,很多东西还没搞清楚.

现在想在一个客户端中实现多个socket的连接,请问该怎么做?

能给点示例代码,是最好的,万分感谢!

Joe 发表于 2008-2-20 17:37:31

#include <ace/OS.h>
#include <ace/Reactor.h>
#include <ace/SOCK_Connector.h>

#include <string>
#include <iostream>
using namespace std;

class MyClient:public ACE_Event_Handler
{
public:
    bool open()
    {
      ACE_SOCK_Connector connector;
      ACE_INET_Addr addr(3000,"127.0.0.1");
      ACE_Time_Value timeout(5,0);
      if(connector.connect(peer,addr,&timeout) != 0)
      {
            cout<<endl<<"connecetd fail";
            return false;
      }
      ACE_Reactor::instance()->register_handler(this,ACE_Event_Handler::READ_MASK);
      cout<<endl<<"connecetd ";
      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='\0';
            cout<<endl<<"rev:\t"<<buffer<<endl;
      }
      return 3;
    }

private:
    ACE_SOCK_Stream peer;
    char buffer;
};

class MyClient2:public ACE_Event_Handler {
...

};


int main(int argc, char *argv[])
{
    MyClient1 client1;
    client1.open();
    MyClient2 client2;
    client2.open();

    while(true)
    {
      ACE_Reactor::instance()->handle_events();
    }

    return 0;
}

rocmike 发表于 2008-2-20 17:48:57

Joe,你好!
我的连接数目是不确定的,是根据一个统一服务器传回的各子服务器个数而动态确定的.

能否有新的解决方案?
万分感谢!

Joe 发表于 2008-2-21 09:30:50

那就NEW多个MyClient啊;
如果需要连接其他服务器端口open定义为:open(const ACE_INET_Addr &listen_addr);
不知道可以不?

rocmike 发表于 2008-2-21 09:54:05

可以,非常感谢!!!!!
页: [1]
查看完整版本: 入门者求教:怎样用ACE实现一个客户端的多个socket连接?