首页 > OOP语言 > C++ > 正文

Muduo 网络编程示例(一) 五个简单TCP协议
2014-04-03 00:00:00   来源:www.bianceng.cn   评论:0 点击:

暂时无描述信息

本文将介绍第一个示例:五个简单 TCP 网络服务协议,包括 echo (RFC 862)、discard (RFC 863) 、chargen (RFC 864)、daytime (RFC 867)、time (RFC 868),以及 time 协议的客户端。各协议的功 能简介如下:

* discard - 丢弃所有收到的数据;

* daytime - 服务端 accept 连接之 后,以字符串形式发送当前时间,然后主动断开连接;

* time - 服务端 accept 连接之后,以 二进制形式发送当前时间(从 Epoch 到现在的秒数),然后主动断开连接;我们需要一个客户程序来 把收到的时间转换为字符串。

* echo - 回显服务,把收到的数据发回客户端;

* chargen - 服务端 accept 连接之后,不停地发送测试数据。

以上五个协议使用不同的端口, 可以放到同一个进程中实现,且不必使用多线程。完整的代码见 muduo/examples/simple,下载地址 http://muduo.googlecode.com/files/muduo-0.1.6-alpha.tar.gz 。

discard

Discard 恐怕算是最简单的长连接 TCP 应用层协议,它只需要关注“三个半事件”中的“消息 /数据到达”事件,事件处理函数如下:

  1: void DiscardServer::onMessage(const muduo::net::TcpConnectionPtr& conn,
   2:                  muduo::net::Buffer* buf,
   3:                  muduo::Timestamp time)
   4: {
   5:   string msg(buf->retrieveAsString());  // 取回读到的全部数据
   6:   LOG_INFO << conn->name() << " discards " << msg.size() << " bytes at " << time.toString();
   7: }

剩下的都是例行公事的代码:

定义一个 DiscardServer class,以 TcpServer 为成员。

  1: #ifndef MUDUO_EXAMPLES_SIMPLE_DISCARD_DISCARD_H
   2: #define MUDUO_EXAMPLES_SIMPLE_DISCARD_DISCARD_H
   3: 
   4: #include <muduo/net/TcpServer.h>
   5: 
   6: // RFC 863
   7: class DiscardServer
   8: {
   9:  public:
  10:   DiscardServer(muduo::net::EventLoop* loop,
  11:                 const muduo::net::InetAddress& listenAddr);
  12: 
  13:   void start();
  14: 
  15:  private:
  16:   void onConnection(const muduo::net::TcpConnectionPtr& conn);
  17: 
  18:   void onMessage(const muduo::net::TcpConnectionPtr& conn,
  19:                  muduo::net::Buffer* buf,
  20:                  muduo::Timestamp time);
  21: 
  22:   muduo::net::EventLoop* loop_;
  23:   muduo::net::TcpServer server_;
  24: };
  25: 
  26: #endif  // MUDUO_EXAMPLES_SIMPLE_DISCARD_DISCARD_H

相关热词搜索:

上一篇:Muduo 网络编程示例(二) Boost.Asio 的聊天服务器
下一篇:最后一页

分享到: 收藏