tcpip协议,Muduo 网络编程示例之一:五个简单 TCP 协议

陈硕 (giantchen_AT_gmail)
Blog.csdn.net/Solstice
这是《Muduo 网络编程示例》系列的第一篇文章。
全系列文章列表: http://blog.csdn.net/Solstice/category/779646.aspx
本文将介绍第一个示例:五个简单 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
Tags:  muduo协议 tcp协议 tcpip协议

延伸阅读

最新评论

发表评论