ACE 开发者
文章
日志
文件
圈子
论坛
业内新闻
意见建议
求职招聘
.Net技术
项目管理经验交流
常用工具
IBM Rational
敏捷技术
数据库
中间件
P2P技术
服务器端程序开发
Tcp/IP和Socket
C++学习
开发心得和读书笔记
ACE综合应用
ACE基础应用
海阔天空
您的位置:
ACE 开发者
>>
论坛
>>
ACE基础应用
>>
查看帖子
字体:
小
中
大
入门者求教:怎样用ACE实现一个客户端的多个socket连接?
rocmike 发表于: 2008-2-20 17:25 来源:
ACE 开发者
ACE刚入门,很多东西还没搞清楚.
现在想在一个客户端中实现多个socket的连接,请问该怎么做?
能给点示例代码,是最好的,万分感谢!
最新回复
Joe at 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;
}
rocmike at 2008-2-20 17:48:57
Joe,你好!
我的连接数目是不确定的,是根据一个统一服务器传回的各子服务器个数而动态确定的.
能否有新的解决方案?
万分感谢!
Joe at 2008-2-21 09:30:50
那就NEW多个MyClient啊;
如果需要连接其他服务器端口open定义为:open(const ACE_INET_Addr &listen_addr);
不知道可以不?
rocmike at 2008-2-21 09:54:05
可以,非常感谢!!!!!
查看全部回复
我也来说两句
最新更新主题
ACE_HEX_DUMP的内存泄露
ACE udp绑定ip失败
schedule_timer()向反应器注册问题...
ACE_Message_Block链表是不是在多线程...
关于ACE_NTRACE的问题
编译Hello World出现的问题
[求助] ACE_Message_Block 的 release...
ACE_Asynch_Acceptor 内存泄露
关于proactor问题
关于ACE_Message_Block自动析构的问题...
月度关注热点
ACE在Linux 下编译的奇怪问题....
ACE_Asynch_Acceptor 内存泄露
关于proactor问题
ACE_WIN32_Proactor
[求助] ACE_Message_Block 的 release...
关于Proactor的异步问题。
关于ACE_Message_Block自动析构的问题...
关于日志策略ACE_Logging_Strategy使用...
ACE_Message_Block链表是不是在多线程...
关于调试ACE_Proactor的程序
最新回复
#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;
}
我的连接数目是不确定的,是根据一个统一服务器传回的各子服务器个数而动态确定的.
能否有新的解决方案?
万分感谢!
如果需要连接其他服务器端口open定义为:open(const ACE_INET_Addr &listen_addr);
不知道可以不?