织梦CMS - 轻松建站从此开始!

罗索

可靠UDP例子 RMCast的程序结构说明

落鹤生 发布于 2011-10-18 14:01 点击:次 
ACE里面带了一个这样的例子,在 ACE_wrappers/protocols/ace/RMCast下面。这个例子是MultiCase,只需要稍做修改,就是UDP传输了。代码实现的很漂亮。另外,可以稍做修改,不用ACE,直接用socket做。整个程序采用类似生产上的流水线方式实现
TAG:

可靠UDP源码

ACE里面带了一个这样的例子,在 ACE_wrappers/protocols/ace/RMCast下面。这个例子是MultiCase,只需要稍做修改,就是UDP传输了。代码实现的很漂亮。另外,可以稍做修改,不用ACE,直接用socket做。

整个程序采用类似生产上的流水线方式实现

Socket_Impl是整个处理流程的开始,里面定义了操作流:

ACE_Auto_Ptr<Fragment> fragment_;
ACE_Auto_Ptr<Reassemble> reassemble_;
ACE_Auto_Ptr<Acknowledge> acknowledge_;
ACE_Auto_Ptr<Retransmit> retransmit_;
ACE_Auto_Ptr<Flow> flow_;
ACE_Auto_Ptr<Link> link_;

从上到下依次实现的功能:分包,重组,ACK,重传,发送接收,socket封装.

然后,把发送和接收串成两个流:

   // Start IN stack from top to bottom.
    //

    in_start (0);
    fragment_->in_start (this);
    reassemble_->in_start (fragment_.get ());
    acknowledge_->in_start (reassemble_.get ());
    retransmit_->in_start (acknowledge_.get ());
    flow_->in_start (retransmit_.get ());
    link_->in_start (flow_.get ());

    // Start OUT stack from bottom up.
    //
    link_->out_start (0);
    flow_->out_start (link_.get ());
    retransmit_->out_start (flow_.get ());
    acknowledge_->out_start (retransmit_.get ());
    reassemble_->out_start (acknowledge_.get ());
    fragment_->out_start (reassemble_.get ());
    out_start (fragment_.get ());

注释上说的很清楚,一个是从上到下,一个是从下到上的两个stack流式操作。

out_start表示从最上层也就是应用层, 向下传数据,每传一层执行一个操作,直到最下面的socket sendto.

in_start表示 从最底层的socket,recvfrom收到数据依次向上传,传到一个节点,执行一个操作,和out_start相反的操作。

在Link这个class中,用到了两个socket封装类:

ACE_SOCK_Dgram_Mcast rsock_;

ACE_SOCK_Dgram ssock_;

很明显,一个是multicast socket,另一个是普通的udp.

如果不喜欢用ACE,可以自己封装UDP操作。因为ACE_SOCK_Dgram本身也是很基本的封装。

整个程序架构相当清楚,一目了然。当然前提要稍稍了解一些C++知识,也了解一些socket网络通信知识。如果看不懂这个程序,说明c++方面还稍弱,在继承,虚函数等方面还要多多加强。

(sxcong)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201110/15159.html]
本文出处:blog.csdn.net/sxcong 作者:sxcong
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容