设为首页 加入收藏

TOP

6.4.3 七步实现finger 服务(2)
2013-10-07 16:02:45 来源: 作者: 【 】 浏览:47
Tags:6.4.3 实现 finger 服务

6.4.3 七步实现finger 服务(2)

5. 读取用户名、输出错误信息,然后断开连接。如果读到一行以\r\n 结尾的消息,就发送一条出错信息,然后断开连接。安全问题同上。

  1. --- examples/twisted/finger/finger04.cc 2010-08-29 00:03:14 +0800  
  2. +++ examples/twisted/finger/finger05.cc 2010-08-29 00:06:05 +0800  
  3. @@ -7,12 +7,13 @@  
  4. void onMessage(const TcpConnectionPtr& conn,  
  5. Buffer* buf,  
  6. Timestamp receiveTime)  
  7. {  
  8. if (buf->findCRLF())  
  9. {  
  10. + conn->send("No such user\r\n");  
  11. conn->shutdown();  
  12. }  

6. 从空的UserMap 里查找用户。从一行消息中拿到用户名(L30),在UserMap里查找,然后返回结果。安全问题同上。
  1. examples/twisted/finger/finger06.cc  
  2. 9 typedef std::map<string, string> UserMap;  
  3. 10 UserMap users;  
  4. 11  
  5. 12 string getUser(const string& user)  
  6. 13 {  
  7. 14 string result = "No such user";  
  8. 15 UserMap::iterator it = users.find(user);  
  9. 16 if (it != users.end())  
  10. 17 {  
  11. 18 result = it->second;  
  12. 19 }  
  13. 20 return result;  
  14. 21 }  
  15. 22  
  16. 23 void onMessage(const TcpConnectionPtr& conn,  
  17. 24 Buffer* buf,  
  18. 25 Timestamp receiveTime)  
  19. 26 {  
  20. 27 const char* crlf = buf->findCRLF();  
  21. 28 if (crlf)  
  22. 29 {  
  23. 30 string user(buf->peek(), crlf);  
  24. 31 conn->send(getUser(user) + "\r\n");  
  25. 32 buf->retrieveUntil(crlf + 2);  
  26. 33 conn->shutdown();  
  27. 34 }  
  28. 35 }  
  29. 36  
  30. 37 int main()  
  31. 38 {  
  32. 39 EventLoop loop;  
  33. 40 TcpServer server(&loop, InetAddress(1079), "Finger");  
  34. 41 server.setMessageCallback(onMessage);  
  35. 42 server.start();  
  36. 43 loop.loop();  
  37. 44 }  
  38. examples/twisted/finger/finger06.cc 

7. 往UserMap 里添加一个用户。与前面几乎完全一样,只多了L39。
  1. --- examples/twisted/finger/finger06.cc 2010-08-29 00:14:33 +0800  
  2. +++ examples/twisted/finger/finger07.cc 2010-08-29 00:15:22 +0800  
  3. @@ -36,6 +36,7 @@  
  4. int main()  
  5. {  
  6. + users["schen"] = "Happy and well";  
  7. EventLoop loop;  
  8. TcpServer server(&loop, InetAddress(1079), "Finger");  
  9. server.setMessageCallback(onMessage);  
  10. server.start();  
  11. loop.loop();  

以上就是全部内容,可以用telnet(1) 扮演客户端来测试我们的简单finger 服务端。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.4.3 七步实现finger 服务(1) 下一篇6.4.3 七步实现finger 服务(3)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 安装及连接-腾 (2025-12-25 06:20:28)
·MySQL的下载、安装、 (2025-12-25 06:20:26)
·MySQL 中文网:探索 (2025-12-25 06:20:23)
·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)