找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3970|回复: 4

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

[复制链接]
发表于 2008-2-20 17:25:52 | 显示全部楼层 |阅读模式
ACE刚入门,很多东西还没搞清楚.

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

能给点示例代码,是最好的,万分感谢!
发表于 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[rev]='\0';
            cout<<endl<<"rev:\t"<<buffer<<endl;
        }
        return 3;
    }

private:
    ACE_SOCK_Stream peer;
    char buffer[1024];
};

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;
}
 楼主| 发表于 2008-2-20 17:48:57 | 显示全部楼层
Joe,你好!
我的连接数目是不确定的,是根据一个统一服务器传回的各子服务器个数而动态确定的.

能否有新的解决方案?
万分感谢!
发表于 2008-2-21 09:30:50 | 显示全部楼层
那就NEW多个MyClient啊;
如果需要连接其他服务器端口open定义为:open(const ACE_INET_Addr &listen_addr);
不知道可以不?
 楼主| 发表于 2008-2-21 09:54:05 | 显示全部楼层
可以,非常感谢!!!!!
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 12:39 , Processed in 0.017901 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表