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

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

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++方面还稍弱,在继承,虚函数等方面还要多多加强。

 

更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值