Muduo 網路編程樣本(一) 五個簡單TCP協議

來源:互聯網
上載者:User

本文將介紹第一個樣本:五個簡單 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

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。