找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 11286|回复: 13

ACE实现socket转发功能

[复制链接]
发表于 2009-9-23 16:42:41 | 显示全部楼层 |阅读模式
现在想在ace框架下实现如下的一个小功能
tcp连接
1、侦听某端口A,接受来自E的报文M
2、将M报文处理,比如LZ77
3、将处理后的M'送到端口B,发送给T

这样的功能如何实现呢?谢谢大家
 楼主| 发表于 2009-9-23 21:15:07 | 显示全部楼层
:) :) :) :) :) :)
发表于 2009-9-23 21:28:51 | 显示全部楼层
问题太宽泛了。
这样的问题,翻开书就有答案的。
 楼主| 发表于 2009-9-24 14:09:36 | 显示全部楼层
有这样详细的业务流程竟然还宽泛啊
…………
我倒是用echo server搞了一个repeator
但是还有些程序细节搞不定。
太宽泛了
 楼主| 发表于 2009-9-24 14:10:21 | 显示全部楼层
而且不晓得是不是规范?是否可以负载较大。
 楼主| 发表于 2009-9-24 14:14:34 | 显示全部楼层
那怎么才能详细起来呢?
主动连接?被动连接?
长连接?短连接?
 楼主| 发表于 2009-9-25 09:50:38 | 显示全部楼层
简单写了这样一个东西出来。就是如果修改成
const int BUFSIZE = 8192;

unsigned   char   *buffer =   new   unsigned   char(BUFSIZE);

的话是不是我就要把
peer_stream_e .recv( (void*)str.c_str(), str.length() );
改成peer_stream_e .recv( buffer,BUFSIZE);

// acerepeator.cpp : 定义控制台应用程序的入口点。


#include "stdafx.h"



// acesimser.cpp : 定义控制台应用程序的入口点。
//本文件原为echo server 现在将其改装为repeator

#include "stdafx.h"

/*int _tmain(int argc, _TCHAR* argv[])
{
        return 0;
}*/
#include <iostream>
#include <string>
#include "ace/ACE.h"
#include "ace/INET_Addr.h"
#include "ace/SOCK_Acceptor.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Connector.h"
using namespace std;

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

//string str("1",1024);
// str.resize( sizeof( "hoooo world9999" ) );
string str;
str.resize( sizeof( "hoooo world999955533322211199988877766555" ) );
//while( 1 ){
//设置服务器地址:用于接收来自e 的业务报文
ACE_INET_Addr peer_addr_e ( 5050, "127.0.0.1" );

ACE_SOCK_Stream peer_stream_e ; //创建被动连接角色对象
ACE_SOCK_Acceptor peer_acceptor_e ; //开启被动连接对象,将对象绑定到一个地址上
peer_acceptor_e .open( peer_addr_e  );  //等待连接
peer_acceptor_e .accept( peer_stream_e  );  //数据通讯
peer_stream_e .recv( (void*)str.c_str(), str.length() );//接收来自客户端的数据
cout << "接收到e 客户端的消息 : " << str << endl;
// peer_stream.send( str.c_str(), str.length() );


/*以下代码将此业务报文str发送到t */

ACE_INET_Addr peer_addr_t ( 5051, "127.0.0.1" );
ACE_SOCK_Stream peer_stream_t ;//定义一个通讯队形

ACE_SOCK_Connector peer_connector_t ;//定义一个主动连接对象
peer_connector_t .connect( peer_stream_t , peer_addr_t  );//发起一个连接

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


cout << "发送到t 的业务报文 : " << str <<endl;



//}
ACE::fini();

system("PAUSE");
return 0;
}

程序写的很幼稚,大家多提建议,谢谢
 楼主| 发表于 2009-9-26 19:50:07 | 显示全部楼层
是不是没有技术含量啊,大家都不肯赐教…………
发表于 2009-9-28 16:42:50 | 显示全部楼层
如果是转发器的话,可以参考C++网络编程1中的日志系统,接受多个客户端,然后将数据发送到远端服务器端,就是一个转发器,但是要考虑与服务器断开后,如何处理数据的问题。
 楼主| 发表于 2009-9-29 09:19:52 | 显示全部楼层
谢谢提醒,我先看看日至系统怎么写的。功力比较差,谢谢大家不吝赐教
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-22 17:37 , Processed in 0.425573 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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