免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: BIOO
打印 上一主题 下一主题

[C++] socket编程:转发报文如何处理 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-09-24 11:26 |只看该作者
原帖由 koolcoy 于 2009-9-24 10:46 发表
又md5又lz77的~~~。如果程序负载大一点客户绝对嚼了你,骨头都不会吐


这个是客户的强烈要求。不是某能决定的,某认为不足1k的业务报文,还是专线连接,搞这些都是扯淡。
某只是个小把戏,让他们折腾吧。
只考虑怎么实现这个玩意儿

论坛徽章:
0
22 [报告]
发表于 2009-09-24 12:34 |只看该作者
用string类?

const int BUFSIZE = 8192;

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

这样可以吧

论坛徽章:
0
23 [报告]
发表于 2009-09-24 13:52 |只看该作者
简单写了这样一个东西出来。就是如果修改成
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;
}

程序写的很幼稚,大家多提建议,谢谢

[ 本帖最后由 BIOO 于 2009-9-24 14:00 编辑 ]

论坛徽章:
0
24 [报告]
发表于 2009-09-24 15:53 |只看该作者
大家多提提意见啦,写的太幼稚。

论坛徽章:
0
25 [报告]
发表于 2009-09-24 17:30 |只看该作者
这种代码我看着总是高深莫测,你实在是很难搞清楚里面到底做了些什么动作。

你这个代码能满足你的需求吗?似乎还是要用reactor或者proactor来做吧。

但是如果对ace这些模式不是非常清楚的话,还是不要用来跑业务,否则,

出了问题麻烦多多。

论坛徽章:
0
26 [报告]
发表于 2009-09-24 21:23 |只看该作者
嗯,谢谢huxk,这个倒是能基本满足了。
您说的反应器之类的还没搞清楚呢。
目前只能拿这个代码跑跑玩玩。
read
write等等的还在折腾呢。

ace的东西太多了。不过某的OO意识太差了。
感觉如果只是写个转发程序,是不是就是写一个repeator?假设不进行lz77或者md5之类的话。

论坛徽章:
0
27 [报告]
发表于 2009-09-24 21:34 |只看该作者
觉得这种网络通信程序都不知道如何写才能完美

论坛徽章:
0
28 [报告]
发表于 2009-09-29 08:58 |只看该作者
觉得关键还是转发程序如何写的好。md5或许可以去掉了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP