ACE反应器模型的应用——UDP通信的设计

UDP 通信的特点是无连接。这里只要一个处理器 UDP_Peer_Event_Handler ,用来监听是否有数据报。

图表 2 5

  •   UDP_Peer_Event_Handler ,当有对方往这边发送数据时,反应器会回调该处理器的 handler_input 事件函数

 

图表 2 6

代码如下:

UDP_Peer_Event_Handler.h

#ifndef UDP_Peer_Event_HandlerH

#define UDP_Peer_Event_HandlerH

 

#include <ace/Event_Handler.h>

#include <ace/SOCK_Dgram.h>

#include <ace/INET_Addr.h>

#include <ace/Reactor.h>

 

class UDP_Peer_Event_Handler:public ACE_Event_Handler

{

public:

   int handle_input(ACE_HANDLE fd=ACE_INVALID_HANDLE);

   ACE_HANDLE get_handle(void) const { return gram_.get_handle(); }

 

   UDP_Peer_Event_Handler(int port);

private:

   ACE_INET_Addr addr;

   ACE_SOCK_Dgram gram_;

};

#endif

UDP_Peer_Event_Handler.cpp

#include <iostream>

#include "UDP_Peer_Event_Handler.h"

 

int UDP_Peer_Event_Handler::handle_input(ACE_HANDLE fd)

{

   char buf[1024];

   char addr_str[512];

   ACE_INET_Addr remote_addr;

 

   int len = gram_.recv(buf,1023,remote_addr);

   buf[len] = 0;

   remote_addr.addr_to_string(addr_str,sizeof addr_str);

 

   std::cout << "recv data from " << addr_str << ":/n"

            << buf << std::endl;

 

   return 0;

}

 

UDP_Peer_Event_Handler::UDP_Peer_Event_Handler(int port):addr(port),gram_(addr)

{

    ACE_Reactor::instance()->register_handler(this,ACE_Event_Handler::READ_MASK);

}

main.cpp

#include "UDP_Peer_Event_Handler.h"

int main(int argc, char* argv[])

{

   UDP_Peer_Event_Handler udp(9999);

   ACE_Reactor::instance()->run_event_loop();

   return 0;

                }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值