posts - 58,  comments - 75,  trackbacks - 0

    ACE_INET_Addr类,包装了网络地址
    ACE_SOCK_Connector类,扮演主动连接角色,发起通讯连接。连接到远端的服务。
    ACE_SOCK_Acceptor类,扮演被动连接角色,等待连接。等待远端客户的请求。
    ACE_SOCK_Stream类,扮演数据通讯角色,发送和接收数据。完成客户与服务之间的通讯。
   
    利用ACE库来开发网络通讯程序是很简单的,一个基本程序只用到以上提到的几个类,就
可以完成一个基于客户端、服务器端模型的网络应用的开发。开发者无需了解Socket在不同平
台上的实现,记忆众多并相互关联的Socket APIs。

    一下以一个Hello World程序为演示。
   
    客户端程序。发送一个Hello World到远端的服务器,并接收服务器返回的信息,将信息
打印在屏幕上。

#include <iostream>
#include <string>

#include <ace/ACE.h>
#include <ace/INET_Addr.h>
#include <ace/SOCK_Connector.h>
#include <ace/SOCK_Stream.h>

int main( int argc, char* argv[] )
{
 ACE::init();//初始化ACE库,在windows下一定要

 std::string str = "hello world";

 //设置服务器地址
 //第一个参数是端口,第二个是ip地址,也可以是域名。
 //可以先定义一个地址对象,再用ACE_INET_Addr的set函数来设定。
 //地址的配置很多,具体的参照文档
 ACE_INET_Addr peer_addr( 5050, "127.0.0.1" );
 ACE_SOCK_Stream peer_stream;//定义一个通讯队形

 ACE_SOCK_Connector peer_connector;//定义一个主动连接对象
 peer_connector.connect( peer_stream, peer_addr );//发起一个连接

 peer_stream.send( str.c_str(), str.length() );//发送数据到服务器

 str.erase();
 str.resize( sizeof( "hello world" ) );
 peer_stream.recv( (void*)str.c_str(), str.length() );//接收来自服务器的信息

 std::cout << "from server message : " << str << std::endl;

    ACE::fini();
 return 0;
}

    服务器端代码。接收一个远端的连接,将接收到的信息打印在屏幕上,并将接收到的信
息返回给客户端。
#include <iostream>
#include <string>

#include <ace/ACE.h>
#include <ace/SOCK_Acceptor.h>
#include <ace/SOCK_Stream.h>

int main( int argc, char* argv[] )
{
 ACE::init();

 std::string str;
 str.resize( sizeof( "hello world" ) );

 //设置服务器地址
 ACE_INET_Addr peer_addr( 5050, "127.0.0.1" );

 ACE_SOCK_Stream peer_stream;
 
 //创建被动连接角色对象
 ACE_SOCK_Acceptor peer_acceptor;
 //开启被动连接对象,将对象绑定到一个地址上
 peer_acceptor.open( peer_addr );

 //等待连接
 peer_acceptor.accept( peer_stream );

 //数据通讯
 peer_stream.recv( (void*)str.c_str(), str.length() );
 std::cout << "from client message : " << str << std::endl;
 peer_stream.send( str.c_str(), str.length() );

 ACE::fini();
 return 0;
}
××××以上代码需要ACE库才能运转××××
   
    利用ACE编程的基本框架。
    客户端
    1 创建地址对象。(ACE_INET_Addr)
    2 创建主动连接对象。(ACE_SOCK_Connector)
    3 创建数据通讯对象。(ACE_SOCK_Stream)
    4 设置服务器地址。(ACE_INET_Addr::set)
    5 将数据通讯对象和地址作为参数传给主动连接对象,发起主动连接(ACE_SOCK_Connector::connect)
    6 利用通讯对象接收和发送数据。(ACE_SOCK_Stream::recv和ACE_SOCK_Stream::send)
   
    服务器端
    1 创建地址对象。(ACE_INET_Addr)
    2 创建被动连接对象。(ACE_SOCK_Connector)
    3 创建数据通讯对象。(ACE_SOCK_Stream)
    4 设置服务器地址。(ACE_INET_Addr::set)
    5 将地址作为参数传给被动连接对象,启动接收(ACE_SOCK_Acceptor::open)
    6 将数据通讯对象传给被动连接对象,启动接收,接受连接(ACE_SOCK_Connector::accept)
    7 利用通讯对象接收和发送数据。(ACE_SOCK_Stream::recv和ACE_SOCK_Stream::send)

posted on 2007-02-25 19:30 walkspeed 阅读(12168) 评论(10)  编辑 收藏 引用 所属分类: ACE Farmeworks

FeedBack:
# re: ACE中网络通讯编程基本架构
2007-12-03 22:04 | rolltech
据说ACE很难,所以一直没学,阁下写的这篇文章很容易看懂,这个client/server程序在我的FreeBSD系统上运行的没丝毫差错,问问:ACE到底难不难啊?  回复  更多评论
  
# re: ACE中网络通讯编程基本架构[未登录]
2007-12-11 10:31 | walkspeed
重点在于对网络程序的client和server的理解。

client是个什么东西,要做什么。
server是个什么东西,要做什么。

再去看ACE就好明白了。

ACE给了很多模式。要去理解。

ACE并不是一个单纯的网络库。其实是个系统级的c++API。如果做网络程序,现关注网络部份就可以了。

最好现了解socket编程,并写几个小程序练手  回复  更多评论
  
# re: ACE中网络通讯编程基本架构
2007-12-11 19:39 | rolltech
谢谢了,真有些跃跃欲试了,两年前就听说过ACE了,那时听到一句话:是否学习ACE要慎重考虑,对某些人值得......所以被这话吓着,也许ACE并不难  回复  更多评论
  
# re: ACE中网络通讯编程基本架构[未登录]
2007-12-11 21:32 | eXile
这篇文章说的还是socket编程的模型。
使用ACE,主要用的还是Reactor或Proacoter框架,到那时,还认为ACE不难的,那都是高手。。。  回复  更多评论
  
# re: ACE中网络通讯编程基本架构
2008-03-06 03:51 | rolltech
楼主能不能用python写个这样的模型啊?我很菜的  回复  更多评论
  
# re: ACE中网络通讯编程基本架构
2009-11-19 09:16 | csuwqz
有没有非阻塞模式的啊?  回复  更多评论
  
# re: ACE中网络通讯编程基本架构
2010-04-14 16:27 | archxm
这只是一个包装外观,哪称的上什么基本框架!  回复  更多评论
  
# re: ACE中网络通讯编程基本架构
2012-12-21 15:23 | 曾刚
难于上青天@rolltech
  回复  更多评论
  
# re: ACE中网络通讯编程基本架构
2013-10-10 12:05 | yangy
实现windows作为client, linux作为Server的c/s通信,网络该怎样配置?ip地址不能指定为127.0.0.1了吧?  回复  更多评论
  
# re: ACE中网络通讯编程基本架构
2013-10-10 12:12 | yangy
@yangy这两段程序,我都在windows下或者都在linux下运行,通信都是可以的,但一个在linux下,一个在windows下,两者就连接不上了,楼主给解答下吗?麻烦您了!@yangy
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理



<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(4)

随笔分类(64)

随笔档案(58)

文章分类(3)

文章档案(3)

相册

收藏夹(9)

C++零碎

好友

搜索

  •  

积分与排名

  • 积分 - 159886
  • 排名 - 163

最新评论

阅读排行榜

评论排行榜