{"id":28495,"date":"2025-04-20T00:41:14","date_gmt":"2025-04-19T16:41:14","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/28495.html"},"modified":"2025-04-20T00:41:14","modified_gmt":"2025-04-19T16:41:14","slug":"tcp_sever%ef%bc%88%e7%ba%bf%e7%a8%8b%e6%b1%a0%e7%89%88%e6%9c%ac%e7%9a%84-tcp-%e6%9c%8d%e5%8a%a1%e5%99%a8%ef%bc%89","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/28495.html","title":{"rendered":"Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09"},"content":{"rendered":"<\/p>\n<h4>Tcp_Sever&#xff08;\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668&#xff09;<\/h4>\n<ul>\n<li>\u524d\u8a00<\/li>\n<li>1. \u529f\u80fd\u4ecb\u7ecd\u53ca\u5c55\u793a<\/li>\n<li>\n<ul>\n<li>1.1 \u670d\u52a1\u7aef\u8fde\u63a5<\/li>\n<li>1.2 \u5ba2\u6237\u7aef\u8fde\u63a5&#xff08;\u53ef\u591a\u4e2a\u7528\u6237\u540c\u65f6\u5728\u7ebf\u8fde\u63a5\u670d\u52a1\u7aef&#xff09;<\/li>\n<li>1.3 \u529f\u80fd\u670d\u52a1<\/li>\n<li>\n<ul>\n<li>1.3.1 defaultService&#xff08;\u9ed8\u8ba4\u670d\u52a1&#xff09;<\/li>\n<li>1.3.2 transform&#xff08;\u5927\u5c0f\u5199\u8f6c\u6362&#xff09;<\/li>\n<li>1.3.3 ping&#xff08;ping\u670d\u52a1&#xff09;<\/li>\n<li>1.3.4 translate(\u7ffb\u8bd1)<\/li>\n<\/ul>\n<\/li>\n<li>1.4 \u670d\u52a1\u5668\u91cd\u8fde\u529f\u80fd<\/li>\n<\/ul>\n<\/li>\n<li>2. \u4ee3\u7801\u5b9e\u73b0<\/li>\n<li>\n<ul>\n<li>2.1 \u603b\u4f53\u4ee3\u7801\u8bbe\u8ba1<\/li>\n<li>\n<ul>\n<li>2.1.1 .cc\u6587\u4ef6<\/li>\n<li>2.1.2 .hpp\u6587\u4ef6<\/li>\n<li>2.1.3 \u5176\u4ed6\u6587\u4ef6<\/li>\n<\/ul>\n<\/li>\n<li>2.2\u5177\u4f53\u5b9e\u73b0&#xff08;\u4ee3\u7801\u90fd\u6709\u6ce8\u91ca&#xff09;<\/li>\n<li>\n<ul>\n<li>2.2.1 Log.hpp<\/li>\n<li>2.2.2 nocopy.hpp<\/li>\n<li>2.2.3 LockGuard.hpp<\/li>\n<li>2.2.4 Comm.hpp<\/li>\n<li>2.2.5 Thread.hpp<\/li>\n<li>2.2.6 ThreadPool.hpp<\/li>\n<li>2.2.7 InetAddr.hpp<\/li>\n<li>2.2.8 Translate.hpp<\/li>\n<li>2.2.9 Tcp_Server.hpp<\/li>\n<li>2.2.10 Makefile<\/li>\n<li>2.2.11 Dict.txt<\/li>\n<li>2.2.12 Main.cc<\/li>\n<li>2.2.13 Tcp_Client.cc<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>\u524d\u8a00<\/h2>\n<hr \/>\n<p><font color=\"bool\" size=\"4\">\u5df2\u7ecf\u6709\u534a\u5e74\u6ca1\u6709\u66f4\u65b0\u535a\u5ba2\u4e86&#xff0c;\u5728\u8fd9\u671f\u95f4&#xff0c;\u65f6\u800c\u6c89\u6dc0&#xff0c;\u65f6\u800c\u56e0\u4e3a\u5c31\u4e1a\u611f\u5230\u8ff7\u832b&#xff0c;\u5230\u73b0\u5728&#xff0c;\u5ffd\u7136\u770b\u5f00\u4e86\u4e00\u70b9&#xff0c;\u4e0d\u7ba1\u672a\u6765\u548b\u6837&#xff0c;\u81f3\u5c11\u4e0d\u8981\u8ba9\u81ea\u5df1\u540e\u6094&#xff0c;\u4eba\u751f\u9700\u8981passion&#xff01;\u5e72\u5c31\u5b8c\u4e86&#xff01;&#xff01;&#xff01; <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164110-6803d226e17c1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/font><\/p>\n<p>\u6e90\u7801\u5730\u5740&#xff1a;tcp_server<\/p>\n<p>\u6ce8&#xff1a;\u8be5\u7f51\u7edc\u670d\u52a1\u53ea\u80fd\u5728\u6709\u516c\u7f51ip\u7684\u673a\u5668\u6216\u8005\u4e91\u670d\u52a1\u5668\u4e4b\u95f4\u8fdb\u884c \u865a\u62df\u673a\u4e0a\u53ea\u80fd\u8fdb\u884c\u672c\u5730\u8fde\u63a5&#xff0c;\u4e0d\u80fd\u8fde\u63a5\u5176\u4ed6\u865a\u62df\u673a<\/p>\n<h2>1. \u529f\u80fd\u4ecb\u7ecd\u53ca\u5c55\u793a<\/h2>\n<h3>1.1 \u670d\u52a1\u7aef\u8fde\u63a5<\/h3>\n<p><span class=\"token punctuation\">.<\/span><span class=\"token operator\">\/<\/span>tcp_server <span class=\"token number\">8888<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164111-6803d2272a844.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u6267\u884c\u7ed3\u679c&#xff1a; <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164111-6803d2274ce78.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h3>1.2 \u5ba2\u6237\u7aef\u8fde\u63a5&#xff08;\u53ef\u591a\u4e2a\u7528\u6237\u540c\u65f6\u5728\u7ebf\u8fde\u63a5\u670d\u52a1\u7aef&#xff09;<\/h3>\n<p>\u8fde\u63a5\u670d\u52a1\u5668\u8981\u77e5\u9053\u670d\u52a1\u5668\u7684ip\u5730\u5740<\/p>\n<p>\u6211\u4eec\u6267\u884c\u672c\u5730\u6d4b\u8bd5\u65f6&#xff0c;\u53ef\u4ee5\u7528ifconfig\u6307\u4ee4\u67e5\u770b\u672c\u5730ip\u5730\u5740 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164111-6803d227bdc96.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u8fde\u63a5<\/p>\n<p><span class=\"token punctuation\">.<\/span><span class=\"token operator\">\/<\/span>tcp_client<span class=\"token operator\">&#043;<\/span>IP\u5730\u5740<span class=\"token operator\">&#043;<\/span>\u670d\u52a1\u5668\u7aef\u53e3\u53f7<br \/>\n<span class=\"token punctuation\">.<\/span><span class=\"token operator\">\/<\/span>tcp_client <span class=\"token number\">192.168<\/span><span class=\"token punctuation\">.<\/span><span class=\"token number\">42.200<\/span> <span class=\"token number\">8888<\/span><\/p>\n<p>\u4e24\u4e2a\u5ba2\u6237\u7aef\u540c\u65f6\u8fde\u63a5 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164111-6803d227f231e.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u4e0e\u6b64\u540c\u65f6server\u7aef\u6253\u5370\u65e5\u5fd7 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164112-6803d2283d4de.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h3>1.3 \u529f\u80fd\u670d\u52a1<\/h3>\n<h4>1.3.1 defaultService&#xff08;\u9ed8\u8ba4\u670d\u52a1&#xff09;<\/h4>\n<p><font color=\"bool\">\u9ed8\u8ba4\u670d\u52a1\u5c31\u662f\u7ed9\u6bcf\u4e2a\u8fde\u63a5\u7684\u5ba2\u6237\u7aef\u6253\u5370\u4e00\u4efd\u529f\u80fd\u83dc\u5355 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164112-6803d228682d5.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/font><\/p>\n<h4>1.3.2 transform&#xff08;\u5927\u5c0f\u5199\u8f6c\u6362&#xff09;<\/h4>\n<p><font color=\"bool\">\u5c06\u5c0f\u5199\u5b57\u6bcd\u8f6c\u6362\u4e3a\u5927\u5199\u5b57\u6bcd <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164112-6803d2288c3f4.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/font><\/p>\n<h4>1.3.3 ping&#xff08;ping\u670d\u52a1&#xff09;<\/h4>\n<p><font color=\"bool\">ping\u670d\u52a1&#xff08;\u5fc3\u8df3\u673a\u5236&#xff0c;\u7528\u4e8e\u68c0\u6d4b\u670d\u52a1\u662f\u5426\u6b63\u5e38&#xff09;&#xff0c;\u53d1\u9001ping&#xff0c;\u670d\u52a1\u5668\u5982\u679c\u6b63\u5e38\u8fd0\u884c\u4f1a\u56de\u590d\u4e00\u4e2aPong <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164112-6803d228b6160.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/font><\/p>\n<h4>1.3.4 translate(\u7ffb\u8bd1)<\/h4>\n<p><font color=\"bool\">\u8f93\u5165\u82f1\u6587\u5355\u8bcd&#xff0c;\u4f1a\u8fd4\u56de\u5bf9\u5e94\u7684\u97f3\u6807\u548c\u4e2d\u6587\u89e3\u91ca <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164112-6803d228e00ab.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/font><\/p>\n<h3>1.4 \u670d\u52a1\u5668\u91cd\u8fde\u529f\u80fd<\/h3>\n<p><font color=\"bool\">\u5728\u8fde\u63a5\u8fc7\u7a0b\u4e2d&#xff0c;\u5982\u679c\u670d\u52a1\u7aef\u51fa\u73b0\u95ee\u9898\u8fde\u63a5\u4e0d\u4e0a&#xff0c;\u53ef\u8fdb\u884c5\u6b21\u7684\u91cd\u8fde&#xff0c;\u91cd\u8fde\u6210\u529f\u5373\u53ef\u7ee7\u7eed\u6267\u884c\u670d\u52a1<\/font><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164113-6803d22915195.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h2>2. \u4ee3\u7801\u5b9e\u73b0<\/h2>\n<h3>2.1 \u603b\u4f53\u4ee3\u7801\u8bbe\u8ba1<\/h3>\n<h4>2.1.1 .cc\u6587\u4ef6<\/h4>\n<p><font color=\"bool\">Main.cc&#xff1a;\u7a0b\u5e8f\u7684\u521d\u59cb\u5316\u3001\u914d\u7f6e\u4ee5\u53ca\u4e3b\u8981\u903b\u8f91\u6d41\u7a0b\u3002\u521b\u5efa\u670d\u52a1\u5668\u6216\u5ba2\u6237\u7aef\u5b9e\u4f8b&#xff0c;\u8bbe\u7f6e\u7f51\u7edc\u8fde\u63a5&#xff0c;\u5904\u7406\u7528\u6237\u8f93\u5165 <font color=\"bool\">Tcp_Client.cc&#xff1a;\u5b9e\u73b0TCP \u5ba2\u6237\u7aef\u7684\u529f\u80fd\u3002\u8d1f\u8d23\u4e0e\u670d\u52a1\u5668\u5efa\u7acb\u8fde\u63a5&#xff0c;\u53d1\u9001\u548c\u63a5\u6536\u6570\u636e\u3002\u5305\u542b\u8fde\u63a5\u7ba1\u7406\u3001\u6570\u636e\u5904\u7406\u548c\u9519\u8bef\u5904\u7406\u7684\u903b\u8f91<\/font><\/font><\/p>\n<h4>2.1.2 .hpp\u6587\u4ef6<\/h4>\n<p><font color=\"bool\">ThreadPool.hpp&#xff1a;\u5b9a\u4e49\u7ebf\u7a0b\u6c60\u7684\u63a5\u53e3\u548c\u5b9e\u73b0 LockGuard.hpp&#xff1a;\u5b9e\u73b0\u4e00\u4e2a\u9501\u7684\u5c01\u88c5\u7c7b&#xff0c;\u786e\u4fdd\u5728\u4f5c\u7528\u57df\u5185\u81ea\u52a8\u52a0\u9501\u548c\u89e3\u9501 InetAddr.hpp&#xff1a;\u5904\u7406\u7f51\u7edc\u5730\u5740\u76f8\u5173\u7684\u529f\u80fd&#xff0c;IP \u5730\u5740\u548c\u7aef\u53e3\u7684\u8868\u793a\u548c\u8f6c\u6362 Comm.hpp&#xff1a;\u5b9a\u4e49\u9519\u8bef\u4fe1\u606f Log.hpp&#xff1a;\u8d1f\u8d23\u6253\u5370\u65e5\u5fd7\u7684\u529f\u80fd\u3002\u5305\u542b\u65e5\u5fd7\u7ea7\u522b&#xff0c;\u65e5\u5fd7\u65f6\u95f4 nocopy.hpp&#xff1a;\u9632\u6b62\u7c7b\u7684\u590d\u5236\u6784\u9020\u548c\u8d4b\u503c\u64cd\u4f5c&#xff0c;\u786e\u4fdd\u5bf9\u8c61\u7684\u552f\u4e00\u6027 Tcp_Server.hpp&#xff1a;\u5b9a\u4e49 TCP \u670d\u52a1\u5668\u7684\u63a5\u53e3\u548c\u76f8\u5173\u529f\u80fd&#xff0c;\u5b9e\u73b0\u5982\u4f55\u63a5\u6536\u5ba2\u6237\u7aef\u8fde\u63a5\u3001\u5904\u7406\u8bf7\u6c42\u548c\u7ba1\u7406\u5ba2\u6237\u7aef\u4f1a\u8bdd Thread.hpp&#xff1a;\u5b9a\u4e49\u7ebf\u7a0b\u7684\u63a5\u53e3\u548c\u5b9e\u73b0&#xff0c;\u7ba1\u7406\u7ebf\u7a0b\u7684\u521b\u5efa\u3001\u6267\u884c\u548c\u7ec8\u6b62&#xff0c;\u4e0e\u7ebf\u7a0b\u6c60\u914d\u5408\u4f7f\u7528 Translate.hpp&#xff1a;\u5b9e\u73b0\u8bcd\u5178\u67e5\u627e\u7ffb\u8bd1\u529f\u80fd<\/font><\/p>\n<h4>2.1.3 \u5176\u4ed6\u6587\u4ef6<\/h4>\n<p><font color=\"bool\">Makefile&#xff1a;\u7f16\u8bd1Tcp_Client.cc\u548cMain.cc,\u540c\u65f6\u4fbf\u4e8e\u7ba1\u7406\u751f\u6210\u7684\u53ef\u6267\u884c\u7a0b\u5e8f Dict.txt&#xff1a;\u5b58\u653e\u8bcd\u5178\u6570\u636e<\/font><\/p>\n<h3>2.2\u5177\u4f53\u5b9e\u73b0&#xff08;\u4ee3\u7801\u90fd\u6709\u6ce8\u91ca&#xff09;<\/h3>\n<h4>2.2.1 Log.hpp<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">pragma<\/span> <span class=\"token expression\">once<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span>     <span class=\"token comment\">\/\/ \u5f15\u5165\u8f93\u5165\u8f93\u51fa\u6d41<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstdarg&gt;<\/span>      <span class=\"token comment\">\/\/ \u5f15\u5165\u53d8\u957f\u53c2\u6570\u5904\u7406<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;ctime&gt;<\/span>        <span class=\"token comment\">\/\/ \u5f15\u5165\u65f6\u95f4\u5904\u7406<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/types.h&gt;<\/span>  <span class=\"token comment\">\/\/ \u5f15\u5165\u7cfb\u7edf\u6570\u636e\u7c7b\u578b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;unistd.h&gt;<\/span>     <span class=\"token comment\">\/\/ \u5f15\u5165Unix\u6807\u51c6\u51fd\u6570<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/stat.h&gt;<\/span>   <span class=\"token comment\">\/\/ \u5f15\u5165\u6587\u4ef6\u72b6\u6001\u5904\u7406<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;fcntl.h&gt;<\/span>      <span class=\"token comment\">\/\/ \u5f15\u5165\u6587\u4ef6\u63a7\u5236\u5b9a\u4e49<\/span><\/span><br \/>\n<span class=\"token keyword\">using<\/span> <span class=\"token keyword\">namespace<\/span> std<span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u5b9a\u4e49\u65e5\u5fd7\u7ea7\u522b<\/span><br \/>\n<span class=\"token keyword\">enum<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    Debug <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    Info<span class=\"token punctuation\">,<\/span><br \/>\n    Warning<span class=\"token punctuation\">,<\/span><br \/>\n    Error<span class=\"token punctuation\">,<\/span><br \/>\n    Fatal<br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u5b9a\u4e49\u65e5\u5fd7\u8f93\u51fa\u6837\u5f0f<\/span><br \/>\n<span class=\"token keyword\">enum<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    Screen <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u5230\u5c4f\u5e55<\/span><br \/>\n    OneFile<span class=\"token punctuation\">,<\/span>     <span class=\"token comment\">\/\/ \u8f93\u51fa\u5230\u4e00\u4e2a\u6587\u4ef6<\/span><br \/>\n    ClassFile    <span class=\"token comment\">\/\/ \u8f93\u51fa\u5230\u591a\u4e2a\u5206\u7c7b\u6587\u4ef6<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u5e38\u91cf\u5b9a\u4e49<\/span><br \/>\n<span class=\"token keyword\">const<\/span> <span class=\"token keyword\">int<\/span> defaultstyle <span class=\"token operator\">&#061;<\/span> Screen<span class=\"token punctuation\">;<\/span>            <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u8f93\u51fa\u6837\u5f0f\u4e3a\u5c4f\u5e55<\/span><br \/>\n<span class=\"token keyword\">const<\/span> std<span class=\"token operator\">::<\/span>string default_filename <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;log.&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u65e5\u5fd7\u6587\u4ef6\u540d<\/span><br \/>\n<span class=\"token keyword\">const<\/span> std<span class=\"token operator\">::<\/span>string logdir <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;log&#034;<\/span><span class=\"token punctuation\">;<\/span>           <span class=\"token comment\">\/\/ \u65e5\u5fd7\u76ee\u5f55<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u65e5\u5fd7\u7c7b\u5b9a\u4e49<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Log<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u6784\u9020\u51fd\u6570<\/span><br \/>\n    <span class=\"token function\">Log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token operator\">:<\/span> <span class=\"token function\">style<\/span><span class=\"token punctuation\">(<\/span>defaultstyle<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>                <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u65e5\u5fd7\u6837\u5f0f<\/span><br \/>\n          <span class=\"token function\">filename<\/span><span class=\"token punctuation\">(<\/span>default_filename<span class=\"token punctuation\">)<\/span>         <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u6587\u4ef6\u540d<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">mkdir<\/span><span class=\"token punctuation\">(<\/span>logdir<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0775<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>        <span class=\"token comment\">\/\/ \u521b\u5efa\u65e5\u5fd7\u76ee\u5f55<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u542f\u7528\u6307\u5b9a\u7684\u65e5\u5fd7\u6837\u5f0f<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">Enable<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> sty<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        style <span class=\"token operator\">&#061;<\/span> sty<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u5c06\u65e5\u5fd7\u7ea7\u522b\u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>string <span class=\"token function\">LevelToString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> level<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">switch<\/span> <span class=\"token punctuation\">(<\/span>level<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">case<\/span> Debug<span class=\"token operator\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;Debug&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">case<\/span> Info<span class=\"token operator\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;Info&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">case<\/span> Warning<span class=\"token operator\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;Warning&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">case<\/span> Error<span class=\"token operator\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;Error&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">case<\/span> Fatal<span class=\"token operator\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;Fatal&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">default<\/span><span class=\"token operator\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;Unknown&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u672a\u77e5\u7ea7\u522b<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u83b7\u53d6\u5f53\u524d\u65f6\u95f4\u6233\u5e76\u683c\u5f0f\u5316\u4e3a\u5b57\u7b26\u4e32<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>string <span class=\"token function\">TimeStampExLocalTime<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        time_t currtime <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">time<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u83b7\u53d6\u5f53\u524d\u65f6\u95f4<\/span><br \/>\n        <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">tm<\/span> <span class=\"token operator\">*<\/span>local_time <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">localtime<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>currtime<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f6c\u6362\u4e3a\u672c\u5730\u65f6\u95f4<\/span><br \/>\n        <span class=\"token keyword\">char<\/span> time_buff<span class=\"token punctuation\">[<\/span><span class=\"token number\">128<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">snprintf<\/span><span class=\"token punctuation\">(<\/span>time_buff<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>time_buff<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;%d-%d-%d %d:%d:%d&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 local_time<span class=\"token operator\">-&gt;<\/span>tm_year <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1900<\/span><span class=\"token punctuation\">,<\/span> local_time<span class=\"token operator\">-&gt;<\/span>tm_mon <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> local_time<span class=\"token operator\">-&gt;<\/span>tm_mday<span class=\"token punctuation\">,<\/span><br \/>\n                 local_time<span class=\"token operator\">-&gt;<\/span>tm_hour<span class=\"token punctuation\">,<\/span> local_time<span class=\"token operator\">-&gt;<\/span>tm_min<span class=\"token punctuation\">,<\/span> local_time<span class=\"token operator\">-&gt;<\/span>tm_sec<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> time_buff<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u683c\u5f0f\u5316\u7684\u65f6\u95f4\u5b57\u7b26\u4e32<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u5199\u5165\u65e5\u5fd7\u5230\u5355\u4e2a\u6587\u4ef6<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">WriteLogToOneFile<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> string <span class=\"token operator\">&amp;<\/span>logname<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">const<\/span> string <span class=\"token operator\">&amp;<\/span>message<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">umask<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u91cd\u7f6e\u6587\u4ef6\u521b\u5efa\u63a9\u7801<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> fd <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">open<\/span><span class=\"token punctuation\">(<\/span>logname<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> O_CREAT <span class=\"token operator\">|<\/span> O_WRONLY <span class=\"token operator\">|<\/span> O_APPEND<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0666<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6253\u5f00&#xff08;\u6216\u521b\u5efa&#xff09;\u65e5\u5fd7\u6587\u4ef6<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>fd <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6253\u5f00\u5931\u8d25\u5219\u8fd4\u56de<\/span><br \/>\n        <span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">,<\/span> message<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> message<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5199\u5165\u65e5\u5fd7\u6d88\u606f<\/span><br \/>\n        <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5173\u95ed\u6587\u4ef6<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u5199\u5165\u65e5\u5fd7\u5230\u5206\u7c7b\u6587\u4ef6<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">WriteLogToClassFile<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> string <span class=\"token operator\">&amp;<\/span>levelstr<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">const<\/span> string <span class=\"token operator\">&amp;<\/span>message<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        string logname <span class=\"token operator\">&#061;<\/span> logdir<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u83b7\u53d6\u65e5\u5fd7\u76ee\u5f55<\/span><br \/>\n        logname <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token string\">&#039;\/&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        logname <span class=\"token operator\">&#043;&#061;<\/span> filename<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u6587\u4ef6\u540d<\/span><br \/>\n        logname <span class=\"token operator\">&#043;&#061;<\/span> levelstr<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u7ea7\u522b\u540e\u7f00<\/span><\/p>\n<p>        <span class=\"token function\">WriteLogToOneFile<\/span><span class=\"token punctuation\">(<\/span>logname<span class=\"token punctuation\">,<\/span> message<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8c03\u7528\u5199\u5165\u5355\u4e2a\u6587\u4ef6\u7684\u51fd\u6570<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7edf\u4e00\u5199\u5165\u65e5\u5fd7<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">WriteLog<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> string <span class=\"token operator\">&amp;<\/span>levelstr<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">const<\/span> std<span class=\"token operator\">::<\/span>string <span class=\"token operator\">&amp;<\/span>message<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">switch<\/span> <span class=\"token punctuation\">(<\/span>style<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">case<\/span> Screen<span class=\"token operator\">:<\/span><br \/>\n            cout <span class=\"token operator\">&lt;&lt;<\/span> message <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u5230\u5c4f\u5e55<\/span><br \/>\n            <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">case<\/span> OneFile<span class=\"token operator\">:<\/span><br \/>\n            <span class=\"token function\">WriteLogToOneFile<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;all&#034;<\/span><span class=\"token punctuation\">,<\/span> message<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5199\u5165\u5230\u5355\u4e2a\u6587\u4ef6<\/span><br \/>\n            <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">case<\/span> ClassFile<span class=\"token operator\">:<\/span><br \/>\n            <span class=\"token function\">WriteLogToClassFile<\/span><span class=\"token punctuation\">(<\/span>levelstr<span class=\"token punctuation\">,<\/span> message<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5199\u5165\u5230\u5206\u7c7b\u6587\u4ef6<\/span><br \/>\n            <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u8bb0\u5f55\u65e5\u5fd7\u4fe1\u606f<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> level<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">char<\/span> <span class=\"token operator\">*<\/span>format<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">char<\/span> rightbuffer<span class=\"token punctuation\">[<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b58\u50a8\u683c\u5f0f\u5316\u540e\u7684\u6d88\u606f<\/span><br \/>\n        va_list args<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b9a\u4e49\u53d8\u957f\u53c2\u6570\u5217\u8868<\/span><\/p>\n<p>        <span class=\"token function\">va_start<\/span><span class=\"token punctuation\">(<\/span>args<span class=\"token punctuation\">,<\/span> format<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u53d8\u957f\u53c2\u6570\u5217\u8868<\/span><br \/>\n        <span class=\"token function\">vsnprintf<\/span><span class=\"token punctuation\">(<\/span>rightbuffer<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>rightbuffer<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> format<span class=\"token punctuation\">,<\/span> args<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u683c\u5f0f\u5316\u6d88\u606f<\/span><br \/>\n        <span class=\"token function\">va_end<\/span><span class=\"token punctuation\">(<\/span>args<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ed3\u675f\u53d8\u957f\u53c2\u6570\u5904\u7406<\/span><\/p>\n<p>        <span class=\"token keyword\">char<\/span> leftbuffer<span class=\"token punctuation\">[<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b58\u50a8\u65e5\u5fd7\u5934\u4fe1\u606f<\/span><br \/>\n        std<span class=\"token operator\">::<\/span>string currtime <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">TimeStampExLocalTime<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u83b7\u53d6\u5f53\u524d\u65f6\u95f4<\/span><br \/>\n        std<span class=\"token operator\">::<\/span>string levelstr <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">LevelToString<\/span><span class=\"token punctuation\">(<\/span>level<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>   <span class=\"token comment\">\/\/ \u83b7\u53d6\u65e5\u5fd7\u7ea7\u522b\u5b57\u7b26\u4e32<\/span><br \/>\n        std<span class=\"token operator\">::<\/span>string idstr <span class=\"token operator\">&#061;<\/span> std<span class=\"token operator\">::<\/span><span class=\"token function\">to_string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">getpid<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>  <span class=\"token comment\">\/\/ \u83b7\u53d6\u5f53\u524d\u8fdb\u7a0bID<\/span><br \/>\n        <span class=\"token function\">snprintf<\/span><span class=\"token punctuation\">(<\/span>leftbuffer<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>leftbuffer<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;[%s][%s][%s] &#034;<\/span><span class=\"token punctuation\">,<\/span> levelstr<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> currtime<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> idstr<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u751f\u6210\u65e5\u5fd7\u5934<\/span><\/p>\n<p>        std<span class=\"token operator\">::<\/span>string loginfo <span class=\"token operator\">&#061;<\/span> leftbuffer<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5408\u5e76\u65e5\u5fd7\u5934\u548c\u6d88\u606f<\/span><br \/>\n        loginfo <span class=\"token operator\">&#043;&#061;<\/span> rightbuffer<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">WriteLog<\/span><span class=\"token punctuation\">(<\/span>levelstr<span class=\"token punctuation\">,<\/span> loginfo<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5199\u5165\u65e5\u5fd7<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6790\u6784\u51fd\u6570<\/span><br \/>\n    <span class=\"token operator\">~<\/span><span class=\"token function\">Log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> style<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u65e5\u5fd7\u8f93\u51fa\u6837\u5f0f<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>string filename<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u65e5\u5fd7\u6587\u4ef6\u540d<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u521b\u5efa\u5168\u5c40\u65e5\u5fd7\u5b9e\u4f8b<\/span><br \/>\nLog lg<span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u914d\u7f6e\u7c7b\u5b9a\u4e49<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Conf<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u6784\u9020\u51fd\u6570<\/span><br \/>\n    <span class=\"token function\">Conf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">Enable<\/span><span class=\"token punctuation\">(<\/span>Screen<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u542f\u7528\u5c4f\u5e55\u8f93\u51fa<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token operator\">~<\/span><span class=\"token function\">Conf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span> <span class=\"token comment\">\/\/ \u6790\u6784\u51fd\u6570<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u521b\u5efa\u5168\u5c40\u914d\u7f6e\u5b9e\u4f8b<\/span><br \/>\nConf conf<span class=\"token punctuation\">;<\/span><\/p>\n<h4>2.2.2 nocopy.hpp<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">pragma<\/span> <span class=\"token expression\">once <\/span><span class=\"token comment\">\/\/ \u786e\u4fdd\u5934\u6587\u4ef6\u53ea\u88ab\u5305\u542b\u4e00\u6b21<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span> <span class=\"token comment\">\/\/ \u5f15\u5165\u8f93\u5165\u8f93\u51fa\u6d41\u5e93&#xff08;\u867d\u7136\u8fd9\u91cc\u672a\u4f7f\u7528&#xff09;<\/span><\/span><\/p>\n<p><span class=\"token comment\">\/\/ nocopy \u7c7b\u7528\u4e8e\u7981\u6b62\u5bf9\u8c61\u7684\u590d\u5236\u548c\u8d4b\u503c<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">nocopy<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u6784\u9020\u51fd\u6570<\/span><br \/>\n    <span class=\"token function\">nocopy<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7981\u6b62\u590d\u5236\u6784\u9020\u51fd\u6570<\/span><br \/>\n    <span class=\"token function\">nocopy<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> nocopy <span class=\"token operator\">&amp;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">delete<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5220\u9664\u590d\u5236\u6784\u9020\u51fd\u6570&#xff0c;\u9632\u6b62\u5bf9\u8c61\u590d\u5236<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7981\u6b62\u8d4b\u503c\u64cd\u4f5c\u7b26\u91cd\u8f7d<\/span><br \/>\n    <span class=\"token keyword\">const<\/span> nocopy <span class=\"token operator\">&amp;<\/span><span class=\"token keyword\">operator<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> nocopy <span class=\"token operator\">&amp;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">delete<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5220\u9664\u8d4b\u503c\u64cd\u4f5c\u7b26&#xff0c;\u9632\u6b62\u5bf9\u8c61\u8d4b\u503c<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u6790\u6784\u51fd\u6570<\/span><br \/>\n    <span class=\"token operator\">~<\/span><span class=\"token function\">nocopy<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h4>2.2.3 LockGuard.hpp<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">pragma<\/span> <span class=\"token expression\">once <\/span><span class=\"token comment\">\/\/ \u786e\u4fdd\u5934\u6587\u4ef6\u53ea\u88ab\u5305\u542b\u4e00\u6b21<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;pthread.h&gt;<\/span> <span class=\"token comment\">\/\/ \u5f15\u5165 pthread \u5e93\u4ee5\u4f7f\u7528 POSIX \u7ebf\u7a0b\u76f8\u5173\u529f\u80fd<\/span><\/span><\/p>\n<p><span class=\"token comment\">\/\/ Mutex \u7c7b\u7528\u4e8e\u5c01\u88c5 pthread_mutex_t \u9501\u5bf9\u8c61<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Mutex<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u6784\u9020\u51fd\u6570&#xff0c;\u63a5\u53d7\u5916\u90e8\u4f20\u5165\u7684\u9501\u5bf9\u8c61<\/span><br \/>\n    <span class=\"token function\">Mutex<\/span><span class=\"token punctuation\">(<\/span>pthread_mutex_t <span class=\"token operator\">*<\/span>lock<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">_lock<\/span><span class=\"token punctuation\">(<\/span>lock<span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u9501\u5bf9\u8c61\u6307\u9488<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u9501\u5b9a\u51fd\u6570<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">Lock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">pthread_mutex_lock<\/span><span class=\"token punctuation\">(<\/span>_lock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8c03\u7528 pthread \u5e93\u7684\u9501\u5b9a\u51fd\u6570<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u89e3\u9501\u51fd\u6570<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">Unlock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">pthread_mutex_unlock<\/span><span class=\"token punctuation\">(<\/span>_lock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8c03\u7528 pthread \u5e93\u7684\u89e3\u9501\u51fd\u6570<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6790\u6784\u51fd\u6570<\/span><br \/>\n    <span class=\"token operator\">~<\/span><span class=\"token function\">Mutex<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n    pthread_mutex_t <span class=\"token operator\">*<\/span>_lock<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6307\u5411 pthread_mutex_t \u7c7b\u578b\u7684\u9501\u5bf9\u8c61\u6307\u9488<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ LockGuard \u7c7b\u7528\u4e8e\u81ea\u52a8\u7ba1\u7406\u9501\u7684\u83b7\u53d6\u4e0e\u91ca\u653e<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">LockGuard<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u6784\u9020\u51fd\u6570&#xff0c;\u63a5\u53d7\u5916\u90e8\u4f20\u5165\u7684\u9501\u5bf9\u8c61\u5e76\u81ea\u52a8\u9501\u5b9a<\/span><br \/>\n    <span class=\"token function\">LockGuard<\/span><span class=\"token punctuation\">(<\/span>pthread_mutex_t <span class=\"token operator\">*<\/span>lock<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">_mutex<\/span><span class=\"token punctuation\">(<\/span>lock<span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u521d\u59cb\u5316 LockGuard \u5bf9\u8c61<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        _mutex<span class=\"token punctuation\">.<\/span><span class=\"token function\">Lock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5728\u6784\u9020\u65f6\u9501\u5b9a<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6790\u6784\u51fd\u6570&#xff0c;\u81ea\u52a8\u89e3\u9501<\/span><br \/>\n    <span class=\"token operator\">~<\/span><span class=\"token function\">LockGuard<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        _mutex<span class=\"token punctuation\">.<\/span><span class=\"token function\">Unlock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5728\u6790\u6784\u65f6\u89e3\u9501<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n    Mutex _mutex<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4f7f\u7528 Mutex \u7c7b\u5b9e\u4f8b\u6765\u7ba1\u7406\u9501<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h4>2.2.4 Comm.hpp<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">pragma<\/span> <span class=\"token expression\">once <\/span><span class=\"token comment\">\/\/ \u786e\u4fdd\u5934\u6587\u4ef6\u53ea\u88ab\u5305\u542b\u4e00\u6b21<\/span><\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u5b9a\u4e49\u516c\u5171\u9519\u8bef\u7c7b\u578b<\/span><br \/>\n<span class=\"token keyword\">enum<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    Usage_Err <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token comment\">\/\/ \u7528\u6cd5\u9519\u8bef<\/span><br \/>\n    Socket_Err<span class=\"token punctuation\">,<\/span>    <span class=\"token comment\">\/\/ \u5957\u63a5\u5b57\u9519\u8bef<\/span><br \/>\n    Bind_Err<span class=\"token punctuation\">,<\/span>      <span class=\"token comment\">\/\/ \u7ed1\u5b9a\u9519\u8bef<\/span><br \/>\n    Listen_Err     <span class=\"token comment\">\/\/ \u76d1\u542c\u9519\u8bef<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u5b8f\u5b9a\u4e49&#xff1a;\u5c06\u5730\u5740\u6307\u9488\u8f6c\u6362\u4e3a sockaddr \u7ed3\u6784\u6307\u9488<\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name function\">CONV<\/span><span class=\"token expression\"><span class=\"token punctuation\">(<\/span>addr_ptr<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr<\/span> <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span>addr_ptr<span class=\"token punctuation\">)<\/span><\/span><\/span><\/p>\n<h4>2.2.5 Thread.hpp<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">pragma<\/span> <span class=\"token expression\">once <\/span><span class=\"token comment\">\/\/ \u786e\u4fdd\u5934\u6587\u4ef6\u53ea\u88ab\u5305\u542b\u4e00\u6b21<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span>     <span class=\"token comment\">\/\/ \u5f15\u5165\u8f93\u5165\u8f93\u51fa\u6d41\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;string&gt;<\/span>       <span class=\"token comment\">\/\/ \u5f15\u5165\u5b57\u7b26\u4e32\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;functional&gt;<\/span>   <span class=\"token comment\">\/\/ \u5f15\u5165\u51fd\u6570\u5bf9\u8c61\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;pthread.h&gt;<\/span>    <span class=\"token comment\">\/\/ \u5f15\u5165 pthread \u5e93\u4ee5\u652f\u6301\u591a\u7ebf\u7a0b<\/span><\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u5b9a\u4e49\u4e00\u4e2a\u51fd\u6570\u7c7b\u578b&#xff0c;\u7528\u4e8e\u4f20\u9012\u7ebf\u7a0b\u8981\u6267\u884c\u7684\u51fd\u6570&#xff0c;\u53c2\u6570\u4e3a T \u7c7b\u578b\u7684\u5f15\u7528<\/span><br \/>\n<span class=\"token keyword\">template<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">T<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n<span class=\"token keyword\">using<\/span> func_t <span class=\"token operator\">&#061;<\/span> std<span class=\"token operator\">::<\/span>function<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">void<\/span><span class=\"token punctuation\">(<\/span>T<span class=\"token operator\">&amp;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u5b9a\u4e49\u4e00\u4e2a\u7ebf\u7a0b\u7c7b\u6a21\u677f<\/span><br \/>\n<span class=\"token keyword\">template<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">T<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Thread<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u6784\u9020\u51fd\u6570&#xff0c;\u521d\u59cb\u5316\u7ebf\u7a0b\u540d\u79f0\u3001\u51fd\u6570\u3001\u6570\u636e<\/span><br \/>\n    <span class=\"token function\">Thread<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token operator\">::<\/span>string <span class=\"token operator\">&amp;<\/span>threadname<span class=\"token punctuation\">,<\/span> func_t<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span> func<span class=\"token punctuation\">,<\/span> T <span class=\"token operator\">&amp;<\/span>data<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token operator\">:<\/span> <span class=\"token function\">_tid<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>               <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u7ebf\u7a0bID\u4e3a0<\/span><br \/>\n          <span class=\"token function\">_threadname<\/span><span class=\"token punctuation\">(<\/span>threadname<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u7ebf\u7a0b\u540d\u79f0<\/span><br \/>\n          <span class=\"token function\">_isrunning<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>      <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u7ebf\u7a0b\u8fd0\u884c\u72b6\u6001\u4e3afalse<\/span><br \/>\n          <span class=\"token function\">_func<\/span><span class=\"token punctuation\">(<\/span>func<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>            <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u8981\u6267\u884c\u7684\u51fd\u6570<\/span><br \/>\n          <span class=\"token function\">_data<\/span><span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">)<\/span>             <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u8981\u4f20\u9012\u7684\u6570\u636e<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u7684\u6267\u884c\u4f8b\u7a0b<\/span><br \/>\n    <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token operator\">*<\/span><span class=\"token function\">ThreadRoutine<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span> <span class=\"token operator\">*<\/span>args<span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u9759\u6001\u6210\u5458\u51fd\u6570<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ (void)args; \/\/ \u9632\u6b62\u7f16\u8bd1\u5668\u8b66\u544a&#xff08;\u82e5\u4e0d\u4f7f\u7528 args&#xff09;<\/span><br \/>\n        Thread <span class=\"token operator\">*<\/span>ts <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">static_cast<\/span><span class=\"token operator\">&lt;<\/span>Thread <span class=\"token operator\">*<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span>args<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06 void \u6307\u9488\u8f6c\u6362\u4e3a Thread \u6307\u9488<\/span><\/p>\n<p>        ts<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">_func<\/span><span class=\"token punctuation\">(<\/span>ts<span class=\"token operator\">-&gt;<\/span>_data<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8c03\u7528\u4f20\u5165\u7684\u51fd\u6570&#xff0c;\u5e76\u4f20\u9012\u6570\u636e<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u7a7a\u6307\u9488<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u542f\u52a8\u7ebf\u7a0b<\/span><br \/>\n    <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u521b\u5efa\u7ebf\u7a0b&#xff0c;\u6267\u884c ThreadRoutine&#xff0c;\u4f20\u9012\u5f53\u524d\u5bf9\u8c61\u7684\u6307\u9488<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">pthread_create<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>_tid<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">,<\/span> ThreadRoutine<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u521b\u5efa\u6210\u529f<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            _isrunning <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u66f4\u65b0\u8fd0\u884c\u72b6\u6001<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u6210\u529f<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u5931\u8d25<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7b49\u5f85\u7ebf\u7a0b\u5b8c\u6210<\/span><br \/>\n    <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Join<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>_isrunning<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5982\u679c\u7ebf\u7a0b\u6ca1\u6709\u8fd0\u884c&#xff0c;\u76f4\u63a5\u8fd4\u56de\u6210\u529f<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">pthread_join<\/span><span class=\"token punctuation\">(<\/span>_tid<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7b49\u5f85\u7ebf\u7a0b\u7ed3\u675f<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u7b49\u5f85\u6210\u529f<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            _isrunning <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u66f4\u65b0\u8fd0\u884c\u72b6\u6001<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u6210\u529f<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u5931\u8d25<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u83b7\u53d6\u7ebf\u7a0b\u540d\u79f0<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>string <span class=\"token function\">ThreadName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> _threadname<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u7ebf\u7a0b\u540d\u79f0<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u68c0\u67e5\u7ebf\u7a0b\u662f\u5426\u6b63\u5728\u8fd0\u884c<\/span><br \/>\n    <span class=\"token keyword\">bool<\/span> <span class=\"token function\">IsRunning<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> _isrunning<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u5f53\u524d\u8fd0\u884c\u72b6\u6001<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6790\u6784\u51fd\u6570<\/span><br \/>\n    <span class=\"token operator\">~<\/span><span class=\"token function\">Thread<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n    pthread_t _tid<span class=\"token punctuation\">;<\/span>       <span class=\"token comment\">\/\/ \u7ebf\u7a0bID<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>string _threadname<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u540d\u79f0<\/span><br \/>\n    <span class=\"token keyword\">bool<\/span> _isrunning<span class=\"token punctuation\">;<\/span>      <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u8fd0\u884c\u72b6\u6001<\/span><br \/>\n    func_t<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span> _func<span class=\"token punctuation\">;<\/span>     <span class=\"token comment\">\/\/ \u8981\u6267\u884c\u7684\u51fd\u6570<\/span><br \/>\n    T _data<span class=\"token punctuation\">;<\/span>             <span class=\"token comment\">\/\/ \u4f20\u9012\u7ed9\u51fd\u6570\u7684\u6570\u636e<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h4>2.2.6 ThreadPool.hpp<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">pragma<\/span> <span class=\"token expression\">once <\/span><span class=\"token comment\">\/\/ \u786e\u4fdd\u5934\u6587\u4ef6\u53ea\u88ab\u5305\u542b\u4e00\u6b21<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span>      <span class=\"token comment\">\/\/ \u5f15\u5165\u8f93\u5165\u8f93\u51fa\u6d41\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;queue&gt;<\/span>        <span class=\"token comment\">\/\/ \u5f15\u5165\u961f\u5217\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;vector&gt;<\/span>       <span class=\"token comment\">\/\/ \u5f15\u5165\u5411\u91cf\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;pthread.h&gt;<\/span>    <span class=\"token comment\">\/\/ \u5f15\u5165 pthread \u5e93\u4ee5\u652f\u6301\u591a\u7ebf\u7a0b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;functional&gt;<\/span>    <span class=\"token comment\">\/\/ \u5f15\u5165\u51fd\u6570\u5bf9\u8c61\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;Log.hpp&#034;<\/span>      <span class=\"token comment\">\/\/ \u5f15\u5165\u65e5\u5fd7\u529f\u80fd<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;Thread.hpp&#034;<\/span>   <span class=\"token comment\">\/\/ \u5f15\u5165\u7ebf\u7a0b\u7c7b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;LockGuard.hpp&#034;<\/span> <span class=\"token comment\">\/\/ \u5f15\u5165\u9501\u4fdd\u62a4\u7c7b<\/span><\/span><\/p>\n<p><span class=\"token keyword\">namespace<\/span> TreadNs <span class=\"token comment\">\/\/ \u5b9a\u4e49\u547d\u540d\u7a7a\u95f4 TreadNs<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">int<\/span> defaultnum <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u7ebf\u7a0b\u6570\u91cf<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u6570\u636e\u7c7b&#xff0c;\u5b58\u50a8\u7ebf\u7a0b\u7684\u540d\u79f0<\/span><br \/>\n    <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ThreadData<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u6784\u9020\u51fd\u6570&#xff0c;\u521d\u59cb\u5316\u7ebf\u7a0b\u540d\u79f0<\/span><br \/>\n        <span class=\"token function\">ThreadData<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token operator\">::<\/span>string <span class=\"token operator\">&amp;<\/span>name<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">threadname<\/span><span class=\"token punctuation\">(<\/span>name<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u6790\u6784\u51fd\u6570<\/span><br \/>\n        <span class=\"token operator\">~<\/span><span class=\"token function\">ThreadData<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n        std<span class=\"token operator\">::<\/span>string threadname<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u540d\u79f0<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u6c60\u7c7b\u6a21\u677f<\/span><br \/>\n    <span class=\"token keyword\">template<\/span> <span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">T<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n    <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ThreadPool<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u6784\u9020\u51fd\u6570&#xff0c;\u521d\u59cb\u5316\u7ebf\u7a0b\u6c60&#xff0c;\u521b\u5efa\u6307\u5b9a\u6570\u91cf\u7684\u7ebf\u7a0b<\/span><br \/>\n        <span class=\"token function\">ThreadPool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> thread_num <span class=\"token operator\">&#061;<\/span> defaultnum<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">_thread_num<\/span><span class=\"token punctuation\">(<\/span>thread_num<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token function\">pthread_mutex_init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>_mutex<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u4e92\u65a5\u9501<\/span><br \/>\n            <span class=\"token function\">pthread_cond_init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>_cond<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>   <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u6761\u4ef6\u53d8\u91cf<\/span><\/p>\n<p>            <span class=\"token comment\">\/\/ \u521b\u5efa\u6307\u5b9a\u6570\u91cf\u7684\u7ebf\u7a0b<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> _thread_num<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><br \/>\n                std<span class=\"token operator\">::<\/span>string threadname <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;thread-&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u540d\u79f0<\/span><br \/>\n                threadname <span class=\"token operator\">&#043;&#061;<\/span> std<span class=\"token operator\">::<\/span><span class=\"token function\">to_string<\/span><span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u751f\u6210\u7ebf\u7a0b\u540d\u79f0<\/span><\/p>\n<p>                ThreadData <span class=\"token function\">td<\/span><span class=\"token punctuation\">(<\/span>threadname<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521b\u5efa\u7ebf\u7a0b\u6570\u636e\u5bf9\u8c61<\/span><\/p>\n<p>                <span class=\"token comment\">\/\/ \u521b\u5efa\u7ebf\u7a0b\u5e76\u7ed1\u5b9a\u6267\u884c\u51fd\u6570 ThreadRun<\/span><br \/>\n                _threads<span class=\"token punctuation\">.<\/span><span class=\"token function\">emplace_back<\/span><span class=\"token punctuation\">(<\/span>threadname<span class=\"token punctuation\">,<\/span><br \/>\n                                      std<span class=\"token operator\">::<\/span><span class=\"token function\">bind<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>ThreadPool<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span><span class=\"token operator\">::<\/span>ThreadRun<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                                                std<span class=\"token operator\">::<\/span>placeholders<span class=\"token operator\">::<\/span>_1<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                                      td<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Info<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;%s is created&#8230;\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> threadname<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bb0\u5f55\u7ebf\u7a0b\u521b\u5efa\u65e5\u5fd7<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u5220\u9664\u590d\u5236\u6784\u9020\u51fd\u6570\u548c\u8d4b\u503c\u64cd\u4f5c\u7b26&#xff0c;\u7981\u6b62\u590d\u5236<\/span><br \/>\n        <span class=\"token function\">ThreadPool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> ThreadPool<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span> <span class=\"token operator\">&amp;<\/span>tp<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">delete<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">const<\/span> ThreadPool<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span> <span class=\"token operator\">&amp;<\/span><span class=\"token keyword\">operator<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> ThreadPool<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">delete<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u83b7\u53d6\u7ebf\u7a0b\u6c60\u5355\u4f8b<\/span><br \/>\n        <span class=\"token keyword\">static<\/span> ThreadPool<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span> <span class=\"token operator\">*<\/span><span class=\"token function\">GetInstance<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>instance <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u5982\u679c\u5b9e\u4f8b\u4e0d\u5b58\u5728<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><br \/>\n                LockGuard <span class=\"token function\">lockguard<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>sig_lock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4f7f\u7528\u9501\u786e\u4fdd\u7ebf\u7a0b\u5b89\u5168<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>instance <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u518d\u6b21\u68c0\u67e5<\/span><br \/>\n                <span class=\"token punctuation\">{<\/span><br \/>\n                    lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Info<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u521b\u5efa\u5355\u4f8b\u6210\u529f&#8230;\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bb0\u5f55\u5355\u4f8b\u521b\u5efa\u65e5\u5fd7<\/span><br \/>\n                    instance <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> ThreadPool<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521b\u5efa\u5355\u4f8b\u5b9e\u4f8b<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><\/p>\n<p>            <span class=\"token keyword\">return<\/span> instance<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u7ebf\u7a0b\u6c60\u5b9e\u4f8b<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u542f\u52a8\u7ebf\u7a0b\u6c60<\/span><br \/>\n        <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">auto<\/span> <span class=\"token operator\">&amp;<\/span>thread <span class=\"token operator\">:<\/span> _threads<span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u904d\u5386\u6240\u6709\u7ebf\u7a0b<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><br \/>\n                thread<span class=\"token punctuation\">.<\/span><span class=\"token function\">Start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u542f\u52a8\u7ebf\u7a0b<\/span><br \/>\n                lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Info<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;%s is running &#8230;\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> thread<span class=\"token punctuation\">.<\/span><span class=\"token function\">ThreadName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bb0\u5f55\u7ebf\u7a0b\u8fd0\u884c\u65e5\u5fd7<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><\/p>\n<p>            <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u6210\u529f<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u7b49\u5f85\u51fd\u6570<\/span><br \/>\n        <span class=\"token keyword\">void<\/span> <span class=\"token function\">ThreadWait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> ThreadData <span class=\"token operator\">&amp;<\/span>td<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;no task, %s is sleeping&#8230;\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> td<span class=\"token punctuation\">.<\/span>threadname<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bb0\u5f55\u7ebf\u7a0b\u7761\u7720\u65e5\u5fd7<\/span><br \/>\n            <span class=\"token function\">pthread_cond_wait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>_cond<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>_mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7b49\u5f85\u6761\u4ef6\u53d8\u91cf<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u5524\u9192\u7ebf\u7a0b<\/span><br \/>\n        <span class=\"token keyword\">void<\/span> <span class=\"token function\">ThreadWakeup<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token function\">pthread_cond_signal<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>_cond<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u53d1\u9001\u4fe1\u53f7\u5524\u9192\u7b49\u5f85\u7684\u7ebf\u7a0b<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u68c0\u67e5\u7ebf\u7a0b\u6c60\u81ea\u8eab\u72b6\u6001&#xff08;\u529f\u80fd\u5f85\u5b9e\u73b0&#xff09;<\/span><br \/>\n        <span class=\"token keyword\">void<\/span> <span class=\"token function\">checkSelf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token comment\">\/\/ 1. _task_num &gt; _task_num_high_water &amp;&amp; _thread_num &lt; _thread_num_high_water<\/span><br \/>\n            <span class=\"token comment\">\/\/ \u521b\u5efa\u66f4\u591a\u7684\u7ebf\u7a0b&#xff0c;\u5e76\u66f4\u65b0_thread_num<\/span><\/p>\n<p>            <span class=\"token comment\">\/\/ 2. _task_num &#061;&#061; _task_num_low_water &amp;&amp; _thread_num &gt;&#061; _thread_num_high_water<\/span><br \/>\n            <span class=\"token comment\">\/\/ \u9000\u51fa\u7ebf\u7a0b&#xff0c;\u5e76\u66f4\u65b0_thread_num<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u6267\u884c\u51fd\u6570<\/span><br \/>\n        <span class=\"token keyword\">void<\/span> <span class=\"token function\">ThreadRun<\/span><span class=\"token punctuation\">(<\/span>ThreadData <span class=\"token operator\">&amp;<\/span>td<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u65e0\u9650\u5faa\u73af&#xff0c;\u6301\u7eed\u5904\u7406\u4efb\u52a1<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><br \/>\n                T t<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b58\u50a8\u4efb\u52a1<\/span><\/p>\n<p>                <span class=\"token punctuation\">{<\/span><br \/>\n                    LockGuard <span class=\"token function\">lockguard<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>_mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4f7f\u7528\u9501\u4fdd\u62a4\u4e34\u754c\u533a<\/span><br \/>\n                    <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span>_q<span class=\"token punctuation\">.<\/span><span class=\"token function\">empty<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u5982\u679c\u4efb\u52a1\u961f\u5217\u4e3a\u7a7a<\/span><br \/>\n                    <span class=\"token punctuation\">{<\/span><br \/>\n                        <span class=\"token function\">ThreadWait<\/span><span class=\"token punctuation\">(<\/span>td<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u7b49\u5f85<\/span><br \/>\n                        lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;thread %s is wakeup\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> td<span class=\"token punctuation\">.<\/span>threadname<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bb0\u5f55\u7ebf\u7a0b\u5524\u9192\u65e5\u5fd7<\/span><br \/>\n                    <span class=\"token punctuation\">}<\/span><br \/>\n                    t <span class=\"token operator\">&#061;<\/span> _q<span class=\"token punctuation\">.<\/span><span class=\"token function\">front<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u83b7\u53d6\u961f\u5217\u9996\u90e8\u4efb\u52a1<\/span><br \/>\n                    _q<span class=\"token punctuation\">.<\/span><span class=\"token function\">pop<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u79fb\u9664\u4efb\u52a1<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><\/p>\n<p>                <span class=\"token comment\">\/\/ \u5904\u7406\u4efb\u52a1<\/span><br \/>\n                <span class=\"token function\">t<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6267\u884c\u4efb\u52a1<\/span><br \/>\n                <span class=\"token comment\">\/\/ lg.LogMessage(Debug, &#034;%s handler task %s done, result is : %s\\\\n&#034;,<\/span><br \/>\n                <span class=\"token comment\">\/\/               td.threadname, t.PrintTask().c_str(), t.PrintResult().c_str());<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u63a8\u9001\u4efb\u52a1\u5230\u961f\u5217<\/span><br \/>\n        <span class=\"token keyword\">void<\/span> <span class=\"token function\">Push<\/span><span class=\"token punctuation\">(<\/span>T <span class=\"token operator\">&amp;<\/span>in<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            LockGuard <span class=\"token function\">lockguard<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>_mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4f7f\u7528\u9501\u4fdd\u62a4\u4e34\u754c\u533a<\/span><br \/>\n            _q<span class=\"token punctuation\">.<\/span><span class=\"token function\">push<\/span><span class=\"token punctuation\">(<\/span>in<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u4efb\u52a1\u653e\u5165\u961f\u5217<\/span><br \/>\n            <span class=\"token function\">ThreadWakeup<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5524\u9192\u7ebf\u7a0b\u5904\u7406\u65b0\u4efb\u52a1<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u6790\u6784\u51fd\u6570&#xff0c;\u6e05\u7406\u8d44\u6e90<\/span><br \/>\n        <span class=\"token operator\">~<\/span><span class=\"token function\">ThreadPool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token function\">pthread_mutex_destroy<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>_mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9500\u6bc1\u4e92\u65a5\u9501<\/span><br \/>\n            <span class=\"token function\">pthread_cond_destroy<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>_cond<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9500\u6bc1\u6761\u4ef6\u53d8\u91cf<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u7b49\u5f85\u6240\u6709\u7ebf\u7a0b\u5b8c\u6210&#xff08;\u7528\u4e8e\u8c03\u8bd5&#xff09;<\/span><br \/>\n        <span class=\"token keyword\">void<\/span> <span class=\"token function\">Wait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">auto<\/span> <span class=\"token operator\">&amp;<\/span>thread <span class=\"token operator\">:<\/span> _threads<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><br \/>\n                thread<span class=\"token punctuation\">.<\/span><span class=\"token function\">Join<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7b49\u5f85\u7ebf\u7a0b\u7ed3\u675f<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n        std<span class=\"token operator\">::<\/span>queue<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span> _q<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4efb\u52a1\u961f\u5217<\/span><br \/>\n        std<span class=\"token operator\">::<\/span>vector<span class=\"token operator\">&lt;<\/span>Thread<span class=\"token operator\">&lt;<\/span>ThreadData<span class=\"token operator\">&gt;&gt;<\/span> _threads<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u6c60\u4e2d\u7684\u7ebf\u7a0b<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> _thread_num<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u6570\u91cf<\/span><br \/>\n        pthread_mutex_t _mutex<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4e92\u65a5\u9501<\/span><br \/>\n        pthread_cond_t _cond<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6761\u4ef6\u53d8\u91cf<\/span><\/p>\n<p>        <span class=\"token keyword\">static<\/span> ThreadPool<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span> <span class=\"token operator\">*<\/span>instance<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ebf\u7a0b\u6c60\u5355\u4f8b\u5b9e\u4f8b<\/span><br \/>\n        <span class=\"token keyword\">static<\/span> pthread_mutex_t sig_lock<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9501&#xff0c;\u7528\u4e8e\u63a7\u5236\u5355\u4f8b\u521b\u5efa\u7684\u7ebf\u7a0b\u5b89\u5168<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u9759\u6001\u6210\u5458<\/span><br \/>\n    <span class=\"token keyword\">template<\/span> <span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">T<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n    ThreadPool<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span> <span class=\"token operator\">*<\/span>ThreadPool<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span><span class=\"token operator\">::<\/span>instance <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">template<\/span> <span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">T<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n    pthread_mutex_t ThreadPool<span class=\"token operator\">&lt;<\/span>T<span class=\"token operator\">&gt;<\/span><span class=\"token operator\">::<\/span>sig_lock <span class=\"token operator\">&#061;<\/span> PTHREAD_MUTEX_INITIALIZER<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u4fe1\u53f7\u9501<\/span><\/p>\n<p><span class=\"token punctuation\">}<\/span> <span class=\"token comment\">\/\/ \u7ed3\u675f\u547d\u540d\u7a7a\u95f4 TreadNs<\/span><\/p>\n<h4>2.2.7 InetAddr.hpp<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">pragma<\/span> <span class=\"token expression\">once <\/span><span class=\"token comment\">\/\/ \u786e\u4fdd\u5934\u6587\u4ef6\u53ea\u88ab\u5305\u542b\u4e00\u6b21<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span>      <span class=\"token comment\">\/\/ \u5f15\u5165\u8f93\u5165\u8f93\u51fa\u6d41\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;string&gt;<\/span>        <span class=\"token comment\">\/\/ \u5f15\u5165\u5b57\u7b26\u4e32\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/types.h&gt;<\/span>   <span class=\"token comment\">\/\/ \u5f15\u5165\u7cfb\u7edf\u6570\u636e\u7c7b\u578b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/socket.h&gt;<\/span>   <span class=\"token comment\">\/\/ \u5f15\u5165\u5957\u63a5\u5b57\u76f8\u5173\u51fd\u6570<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;netinet\/in.h&gt;<\/span>  <span class=\"token comment\">\/\/ \u5f15\u5165\u4e92\u8054\u7f51\u57df\u5957\u63a5\u5b57<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;arpa\/inet.h&gt;<\/span>   <span class=\"token comment\">\/\/ \u5f15\u5165\u5730\u5740\u8f6c\u6362\u51fd\u6570<\/span><\/span><\/p>\n<p><span class=\"token comment\">\/\/ InetAddr \u7c7b\u7528\u4e8e\u5c01\u88c5\u548c\u5904\u7406 IPv4 \u5730\u5740\u548c\u7aef\u53e3<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">InetAddr<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u6784\u9020\u51fd\u6570&#xff0c;\u63a5\u53d7\u4e00\u4e2a sockaddr_in \u7ed3\u6784\u4f53\u5f15\u7528<\/span><br \/>\n    <span class=\"token function\">InetAddr<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr_in<\/span> <span class=\"token operator\">&amp;<\/span>addr<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">_addr<\/span><span class=\"token punctuation\">(<\/span>addr<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u5c06\u7f51\u7edc\u5b57\u8282\u5e8f\u7684\u7aef\u53e3\u8f6c\u6362\u4e3a\u4e3b\u673a\u5b57\u8282\u5e8f<\/span><br \/>\n        _port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">ntohs<\/span><span class=\"token punctuation\">(<\/span>_addr<span class=\"token punctuation\">.<\/span>sin_port<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u4f7f\u7528 inet_ntop \u5c06\u7f51\u7edc\u5b57\u8282\u987a\u5e8f\u7684 IP \u5730\u5740\u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32\u5f62\u5f0f<\/span><br \/>\n        <span class=\"token keyword\">char<\/span> ipbuffer<span class=\"token punctuation\">[<\/span><span class=\"token number\">64<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b58\u50a8 IP \u5730\u5740\u5b57\u7b26\u4e32<\/span><br \/>\n        <span class=\"token function\">inet_ntop<\/span><span class=\"token punctuation\">(<\/span>AF_INET<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>addr<span class=\"token punctuation\">.<\/span>sin_addr<span class=\"token punctuation\">,<\/span> ipbuffer<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>ipbuffer<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06 IPv4 \u5730\u5740\u8f6c\u6362\u4e3a\u53ef\u8bfb\u683c\u5f0f<\/span><br \/>\n        _ip <span class=\"token operator\">&#061;<\/span> ipbuffer<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06 IP \u5730\u5740\u5b58\u50a8\u4e3a\u5b57\u7b26\u4e32<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u83b7\u53d6 IP \u5730\u5740<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>string <span class=\"token function\">Ip<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> _ip<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u83b7\u53d6\u7aef\u53e3\u53f7<\/span><br \/>\n    <span class=\"token keyword\">uint16_t<\/span> <span class=\"token function\">Port<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> _port<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6253\u5370\u8c03\u8bd5\u4fe1\u606f&#xff0c;\u683c\u5f0f\u4e3a &#034;IP:Port&#034;<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>string <span class=\"token function\">PrintDebug<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        std<span class=\"token operator\">::<\/span>string info <span class=\"token operator\">&#061;<\/span> _ip<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u83b7\u53d6 IP \u5730\u5740<\/span><br \/>\n        info <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token string\">&#034;:&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u5206\u9694\u7b26<\/span><br \/>\n        info <span class=\"token operator\">&#043;&#061;<\/span> std<span class=\"token operator\">::<\/span><span class=\"token function\">to_string<\/span><span class=\"token punctuation\">(<\/span>_port<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u7aef\u53e3\u53f7<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> info<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u5b8c\u6574\u4fe1\u606f<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u83b7\u53d6 sockaddr_in \u7ed3\u6784\u4f53\u7684\u5f15\u7528<\/span><br \/>\n    <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr_in<\/span><span class=\"token operator\">&amp;<\/span> <span class=\"token function\">GetAddr<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> _addr<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u5730\u5740\u7ed3\u6784\u4f53<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u91cd\u8f7d\u7b49\u4e8e\u8fd0\u7b97\u7b26&#xff0c;\u7528\u4e8e\u6bd4\u8f83\u4e24\u4e2a InetAddr \u5bf9\u8c61<\/span><br \/>\n    <span class=\"token keyword\">bool<\/span> <span class=\"token keyword\">operator<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> InetAddr<span class=\"token operator\">&amp;<\/span> addr<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u68c0\u67e5 IP \u548c\u7aef\u53e3\u662f\u5426\u76f8\u7b49<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token keyword\">this<\/span><span class=\"token operator\">-&gt;<\/span>_ip <span class=\"token operator\">&#061;&#061;<\/span> addr<span class=\"token punctuation\">.<\/span>_ip <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token keyword\">this<\/span><span class=\"token operator\">-&gt;<\/span>_port <span class=\"token operator\">&#061;&#061;<\/span> addr<span class=\"token punctuation\">.<\/span>_port<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6790\u6784\u51fd\u6570<\/span><br \/>\n    <span class=\"token operator\">~<\/span><span class=\"token function\">InetAddr<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>string _ip<span class=\"token punctuation\">;<\/span>          <span class=\"token comment\">\/\/ \u5b58\u50a8 IP \u5730\u5740\u5b57\u7b26\u4e32<\/span><br \/>\n    <span class=\"token keyword\">uint16_t<\/span> _port<span class=\"token punctuation\">;<\/span>           <span class=\"token comment\">\/\/ \u5b58\u50a8\u7aef\u53e3\u53f7<\/span><br \/>\n    <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr_in<\/span> _addr<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b58\u50a8 sockaddr_in \u7ed3\u6784\u4f53<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h4>2.2.8 Translate.hpp<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">pragma<\/span> <span class=\"token expression\">once <\/span><span class=\"token comment\">\/\/ \u786e\u4fdd\u5934\u6587\u4ef6\u53ea\u88ab\u5305\u542b\u4e00\u6b21<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span>          <span class=\"token comment\">\/\/ \u5f15\u5165\u8f93\u5165\u8f93\u51fa\u6d41\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;unordered_map&gt;<\/span>     <span class=\"token comment\">\/\/ \u5f15\u5165\u65e0\u5e8f\u6620\u5c04\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;string&gt;<\/span>            <span class=\"token comment\">\/\/ \u5f15\u5165\u5b57\u7b26\u4e32\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;vector&gt;<\/span>            <span class=\"token comment\">\/\/ \u5f15\u5165\u5411\u91cf\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;fstream&gt;<\/span>           <span class=\"token comment\">\/\/ \u5f15\u5165\u6587\u4ef6\u6d41\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;Log.hpp&#034;<\/span>          <span class=\"token comment\">\/\/ \u5f15\u5165\u65e5\u5fd7\u529f\u80fd<\/span><\/span><\/p>\n<p><span class=\"token keyword\">using<\/span> <span class=\"token keyword\">namespace<\/span> std<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4f7f\u7528\u6807\u51c6\u547d\u540d\u7a7a\u95f4<\/span><\/p>\n<p><span class=\"token keyword\">const<\/span> string unknown <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u672a\u77e5\u7684&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u672a\u77e5\u8bcd\u7684\u9ed8\u8ba4\u8fd4\u56de\u503c<\/span><br \/>\n<span class=\"token keyword\">const<\/span> string mydict <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;.\/resource\/Dict.txt&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u5b57\u5178\u6587\u4ef6\u8def\u5f84<\/span><br \/>\n<span class=\"token keyword\">const<\/span> string sep <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034; &#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b57\u5178\u6587\u4ef6\u4e2d\u8bcd\u4e0e\u7ffb\u8bd1\u4e4b\u95f4\u7684\u5206\u9694\u7b26<\/span><\/p>\n<p><span class=\"token comment\">\/\/ Translate \u7c7b\u7528\u4e8e\u5b9e\u73b0\u7ffb\u8bd1\u529f\u80fd<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Translate<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u6784\u9020\u51fd\u6570&#xff0c;\u63a5\u53d7\u5b57\u5178\u8def\u5f84&#xff0c;\u9ed8\u8ba4\u503c\u4e3a mydict<\/span><br \/>\n    <span class=\"token function\">Translate<\/span><span class=\"token punctuation\">(<\/span>string dict_path <span class=\"token operator\">&#061;<\/span> mydict<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">_dict_path<\/span><span class=\"token punctuation\">(<\/span>dict_path<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">LoadDict<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u52a0\u8f7d\u5b57\u5178\u6587\u4ef6<\/span><br \/>\n        <span class=\"token function\">Parse<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u89e3\u6790\u5b57\u5178\u5185\u5bb9<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u52a0\u8f7d\u5b57\u5178\u6587\u4ef6<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">LoadDict<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        ifstream <span class=\"token function\">in<\/span><span class=\"token punctuation\">(<\/span>_dict_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6253\u5f00\u5b57\u5178\u6587\u4ef6<\/span><br \/>\n        string line<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b58\u50a8\u6bcf\u4e00\u884c\u5185\u5bb9<\/span><br \/>\n        <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">getline<\/span><span class=\"token punctuation\">(<\/span>in<span class=\"token punctuation\">,<\/span> line<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u9010\u884c\u8bfb\u53d6\u6587\u4ef6<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            lines<span class=\"token punctuation\">.<\/span><span class=\"token function\">push_back<\/span><span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u6bcf\u884c\u5185\u5bb9\u5b58\u5165 lines \u5411\u91cf<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        in<span class=\"token punctuation\">.<\/span><span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5173\u95ed\u6587\u4ef6<\/span><br \/>\n        lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;Load dict success, path : %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> _dict_path<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bb0\u5f55\u52a0\u8f7d\u6210\u529f\u65e5\u5fd7<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u8c03\u8bd5\u51fd\u6570&#xff0c;\u8f93\u51fa\u5b57\u5178\u5185\u5bb9<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">debug<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u53ef\u9009&#xff1a;\u8f93\u51fa\u6240\u6709\u884c<\/span><br \/>\n        <span class=\"token comment\">\/\/ for (auto &amp;e : lines)<\/span><br \/>\n        <span class=\"token comment\">\/\/ {<\/span><br \/>\n        <span class=\"token comment\">\/\/     cout &lt;&lt; e &lt;&lt; endl;<\/span><br \/>\n        <span class=\"token comment\">\/\/ }<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u8f93\u51fa\u5b57\u5178\u4e2d\u7684\u6bcf\u4e2a\u8bcd\u53ca\u5176\u7ffb\u8bd1<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">auto<\/span> <span class=\"token operator\">&amp;<\/span>elem <span class=\"token operator\">:<\/span> dict<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            cout <span class=\"token operator\">&lt;&lt;<\/span> elem<span class=\"token punctuation\">.<\/span>first <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; : &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> elem<span class=\"token punctuation\">.<\/span>second <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u683c\u5f0f\u4e3a &#034;\u8bcd : \u7ffb\u8bd1&#034;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u89e3\u6790\u5b57\u5178\u5185\u5bb9<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">Parse<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">auto<\/span> <span class=\"token operator\">&amp;<\/span>line <span class=\"token operator\">:<\/span> lines<span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u904d\u5386\u52a0\u8f7d\u7684\u6bcf\u4e00\u884c<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">auto<\/span> pos <span class=\"token operator\">&#061;<\/span> line<span class=\"token punctuation\">.<\/span><span class=\"token function\">find<\/span><span class=\"token punctuation\">(<\/span>sep<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u67e5\u627e\u5206\u9694\u7b26\u4f4d\u7f6e<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>pos <span class=\"token operator\">&#061;&#061;<\/span> string<span class=\"token operator\">::<\/span>npos<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5982\u679c\u672a\u627e\u5230&#xff0c;\u8df3\u8fc7\u8be5\u884c<\/span><br \/>\n            <span class=\"token keyword\">else<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><br \/>\n                string word <span class=\"token operator\">&#061;<\/span> line<span class=\"token punctuation\">.<\/span><span class=\"token function\">substr<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> pos<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u83b7\u53d6\u8bcd<\/span><br \/>\n                string chinese <span class=\"token operator\">&#061;<\/span> line<span class=\"token punctuation\">.<\/span><span class=\"token function\">substr<\/span><span class=\"token punctuation\">(<\/span>pos <span class=\"token operator\">&#043;<\/span> sep<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u83b7\u53d6\u7ffb\u8bd1<\/span><br \/>\n                dict<span class=\"token punctuation\">.<\/span><span class=\"token function\">insert<\/span><span class=\"token punctuation\">(<\/span>std<span class=\"token operator\">::<\/span><span class=\"token function\">make_pair<\/span><span class=\"token punctuation\">(<\/span>word<span class=\"token punctuation\">,<\/span> chinese<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u8bcd\u548c\u7ffb\u8bd1\u63d2\u5165\u5b57\u5178<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;Parse dict success, path : %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> _dict_path<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bb0\u5f55\u89e3\u6790\u6210\u529f\u65e5\u5fd7<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u67e5\u627e\u7ffb\u8bd1<\/span><br \/>\n    string <span class=\"token function\">Excute<\/span><span class=\"token punctuation\">(<\/span>string word<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">auto<\/span> iter <span class=\"token operator\">&#061;<\/span> dict<span class=\"token punctuation\">.<\/span><span class=\"token function\">find<\/span><span class=\"token punctuation\">(<\/span>word<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u67e5\u627e\u8bcd\u5728\u5b57\u5178\u4e2d\u7684\u4f4d\u7f6e<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>iter <span class=\"token operator\">&#061;&#061;<\/span> dict<span class=\"token punctuation\">.<\/span><span class=\"token function\">end<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> unknown<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5982\u679c\u8bcd\u672a\u627e\u5230&#xff0c;\u8fd4\u56de\u9ed8\u8ba4\u503c<\/span><br \/>\n        <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">return<\/span> dict<span class=\"token punctuation\">[<\/span>word<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u5bf9\u5e94\u7684\u7ffb\u8bd1<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6790\u6784\u51fd\u6570<\/span><br \/>\n    <span class=\"token operator\">~<\/span><span class=\"token function\">Translate<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u5728\u8fd9\u91cc\u53ef\u4ee5\u6dfb\u52a0\u8d44\u6e90\u6e05\u7406\u4ee3\u7801&#xff08;\u5982\u679c\u9700\u8981&#xff09;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n    string _dict_path<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b57\u5178\u6587\u4ef6\u8def\u5f84<\/span><br \/>\n    unordered_map<span class=\"token operator\">&lt;<\/span>string<span class=\"token punctuation\">,<\/span> string<span class=\"token operator\">&gt;<\/span> dict<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b58\u50a8\u5b57\u5178\u6620\u5c04&#xff08;\u8bcd -&gt; \u7ffb\u8bd1&#xff09;<\/span><br \/>\n    vector<span class=\"token operator\">&lt;<\/span>string<span class=\"token operator\">&gt;<\/span> lines<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b58\u50a8\u5b57\u5178\u6587\u4ef6\u7684\u6bcf\u4e00\u884c<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h4>2.2.9 Tcp_Server.hpp<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">pragma<\/span> <span class=\"token expression\">once <\/span><span class=\"token comment\">\/\/ \u786e\u4fdd\u5934\u6587\u4ef6\u53ea\u88ab\u5305\u542b\u4e00\u6b21<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span>          <span class=\"token comment\">\/\/ \u5f15\u5165\u8f93\u5165\u8f93\u51fa\u6d41\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;string&gt;<\/span>            <span class=\"token comment\">\/\/ \u5f15\u5165\u5b57\u7b26\u4e32\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cerrno&gt;<\/span>            <span class=\"token comment\">\/\/ \u5f15\u5165\u9519\u8bef\u53f7\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstring&gt;<\/span>           <span class=\"token comment\">\/\/ \u5f15\u5165\u5b57\u7b26\u4e32\u5904\u7406\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/types.h&gt;<\/span>       <span class=\"token comment\">\/\/ \u5f15\u5165\u7cfb\u7edf\u6570\u636e\u7c7b\u578b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/socket.h&gt;<\/span>      <span class=\"token comment\">\/\/ \u5f15\u5165\u5957\u63a5\u5b57\u76f8\u5173\u51fd\u6570<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;stdlib.h&gt;<\/span>          <span class=\"token comment\">\/\/ \u5f15\u5165\u6807\u51c6\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;netinet\/in.h&gt;<\/span>      <span class=\"token comment\">\/\/ \u5f15\u5165\u4e92\u8054\u7f51\u57df\u5957\u63a5\u5b57<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;arpa\/inet.h&gt;<\/span>       <span class=\"token comment\">\/\/ \u5f15\u5165\u5730\u5740\u8f6c\u6362\u51fd\u6570<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/wait.h&gt;<\/span>        <span class=\"token comment\">\/\/ \u5f15\u5165\u8fdb\u7a0b\u7ba1\u7406\u76f8\u5173\u51fd\u6570<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;pthread.h&gt;<\/span>         <span class=\"token comment\">\/\/ \u5f15\u5165 pthread \u5e93\u4ee5\u652f\u6301\u591a\u7ebf\u7a0b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;functional&gt;<\/span>        <span class=\"token comment\">\/\/ \u5f15\u5165\u51fd\u6570\u5bf9\u8c61\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;unordered_map&gt;<\/span>      <span class=\"token comment\">\/\/ \u5f15\u5165\u65e0\u5e8f\u6620\u5c04\u5e93<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;ThreadPool.hpp&#034;<\/span>     <span class=\"token comment\">\/\/ \u5f15\u5165\u7ebf\u7a0b\u6c60\u7c7b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;InetAddr.hpp&#034;<\/span>       <span class=\"token comment\">\/\/ \u5f15\u5165\u5730\u5740\u7c7b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;Log.hpp&#034;<\/span>            <span class=\"token comment\">\/\/ \u5f15\u5165\u65e5\u5fd7\u529f\u80fd<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;nocopy.hpp&#034;<\/span>         <span class=\"token comment\">\/\/ \u5f15\u5165\u7981\u6b62\u590d\u5236\u7684\u7c7b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;Comm.hpp&#034;<\/span>           <span class=\"token comment\">\/\/ \u5f15\u5165\u901a\u4fe1\u76f8\u5173\u7c7b<\/span><\/span><br \/>\n<span class=\"token comment\">\/\/ #include &#034;Task.hpp&#034;          \/\/ \u53ef\u9009\u7684\u4efb\u52a1\u7c7b<\/span><\/p>\n<p><span class=\"token keyword\">const<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">int<\/span> default_backlog <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">5<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u6700\u5927\u8fde\u63a5\u6570<\/span><br \/>\n<span class=\"token keyword\">using<\/span> task_t <span class=\"token operator\">&#061;<\/span> function<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">void<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b9a\u4e49\u4efb\u52a1\u7c7b\u578b<\/span><br \/>\n<span class=\"token keyword\">using<\/span> callback_t <span class=\"token operator\">&#061;<\/span> function<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">void<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span><span class=\"token punctuation\">,<\/span> InetAddr <span class=\"token operator\">&amp;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b9a\u4e49\u56de\u8c03\u51fd\u6570\u7c7b\u578b<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">TcpServer<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u524d\u5411\u58f0\u660e TcpServer \u7c7b<\/span><\/p>\n<p><span class=\"token comment\">\/\/ TcpServer \u7c7b\u7528\u4e8e\u5b9e\u73b0 TCP \u670d\u52a1\u5668\u529f\u80fd<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">TcpServer<\/span> <span class=\"token operator\">:<\/span> <span class=\"token base-clause\"><span class=\"token class-name\">nocopy<\/span> <span class=\"token comment\">\/\/ \u7ee7\u627f nocopy&#xff0c;\u7981\u6b62\u590d\u5236<\/span><\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u6784\u9020\u51fd\u6570&#xff0c;\u521d\u59cb\u5316\u670d\u52a1\u5668\u7aef\u53e3\u548c\u8fd0\u884c\u72b6\u6001<\/span><br \/>\n    <span class=\"token function\">TcpServer<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">uint16_t<\/span> port<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">_port<\/span><span class=\"token punctuation\">(<\/span>port<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">_isrunning<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u670d\u52a1\u5668<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">Init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ 1. \u521b\u5efa\u5957\u63a5\u5b57<\/span><br \/>\n        _listensock <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">socket<\/span><span class=\"token punctuation\">(<\/span>AF_INET<span class=\"token punctuation\">,<\/span> SOCK_STREAM<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521b\u5efa TCP \u5957\u63a5\u5b57<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>_listensock <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token comment\">\/\/ \u5982\u679c\u521b\u5efa\u5931\u8d25&#xff0c;\u8bb0\u5f55\u65e5\u5fd7\u5e76\u9000\u51fa<\/span><br \/>\n            lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Fatal<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u521b\u5efa\u5957\u63a5\u5b57\u5931\u8d25: %d, error string: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> errno<span class=\"token punctuation\">,<\/span> <span class=\"token function\">strerror<\/span><span class=\"token punctuation\">(<\/span>errno<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span>Fatal<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u521b\u5efa\u5957\u63a5\u5b57\u6210\u529f: sockfd: %d&#034;<\/span><span class=\"token punctuation\">,<\/span> _listensock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u89e3\u51b3\u7ed1\u5b9a\u5931\u8d25\u7684\u95ee\u9898<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> opt <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u7f6e\u5957\u63a5\u5b57\u9009\u9879<\/span><br \/>\n        <span class=\"token function\">setsockopt<\/span><span class=\"token punctuation\">(<\/span>_listensock<span class=\"token punctuation\">,<\/span> SOL_SOCKET<span class=\"token punctuation\">,<\/span> SO_REUSEADDR <span class=\"token operator\">|<\/span> SO_REUSEPORT<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>opt<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>opt<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5141\u8bb8\u91cd\u7528\u5730\u5740\u548c\u7aef\u53e3<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 2. \u586b\u5145\u672c\u5730\u7f51\u7edc\u4fe1\u606f\u5e76\u7ed1\u5b9a<\/span><br \/>\n        <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr_in<\/span> local<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b9a\u4e49\u672c\u5730\u5730\u5740\u7ed3\u6784<\/span><br \/>\n        <span class=\"token function\">memset<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>local<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>local<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6e05\u7a7a\u7ed3\u6784\u4f53<\/span><br \/>\n        local<span class=\"token punctuation\">.<\/span>sin_family <span class=\"token operator\">&#061;<\/span> AF_INET<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4f7f\u7528 IPv4<\/span><br \/>\n        local<span class=\"token punctuation\">.<\/span>sin_port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">htons<\/span><span class=\"token punctuation\">(<\/span>_port<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u7f6e\u7aef\u53e3<\/span><br \/>\n        local<span class=\"token punctuation\">.<\/span>sin_addr<span class=\"token punctuation\">.<\/span>s_addr <span class=\"token operator\">&#061;<\/span> INADDR_ANY<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5141\u8bb8\u63a5\u53d7\u6240\u6709\u8fde\u63a5<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 2.1 \u7ed1\u5b9a\u5957\u63a5\u5b57<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">bind<\/span><span class=\"token punctuation\">(<\/span>_listensock<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr<\/span> <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">&amp;<\/span>local<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>local<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token comment\">\/\/ \u5982\u679c\u7ed1\u5b9a\u5931\u8d25&#xff0c;\u8bb0\u5f55\u65e5\u5fd7\u5e76\u9000\u51fa<\/span><br \/>\n            lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Fatal<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;bind\u5957\u63a5\u5b57\u5931\u8d25: %d, error string: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> errno<span class=\"token punctuation\">,<\/span> <span class=\"token function\">strerror<\/span><span class=\"token punctuation\">(<\/span>errno<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span>Bind_Err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;bind\u5957\u63a5\u5b57\u6210\u529f: sockfd: %d&#034;<\/span><span class=\"token punctuation\">,<\/span> _listensock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ 3. \u8bbe\u7f6e\u5957\u63a5\u5b57\u4e3a\u76d1\u542c\u72b6\u6001<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">listen<\/span><span class=\"token punctuation\">(<\/span>_listensock<span class=\"token punctuation\">,<\/span> default_backlog<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token comment\">\/\/ \u5982\u679c\u76d1\u542c\u5931\u8d25&#xff0c;\u8bb0\u5f55\u65e5\u5fd7\u5e76\u9000\u51fa<\/span><br \/>\n            lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Fatal<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u76d1\u542c\u5957\u63a5\u5b57\u5931\u8d25: %d, error string: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> errno<span class=\"token punctuation\">,<\/span> <span class=\"token function\">strerror<\/span><span class=\"token punctuation\">(<\/span>errno<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span>Listen_Err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u76d1\u542c\u5957\u63a5\u5b57\u6210\u529f: sockfd: %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> _listensock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u542f\u52a8\u7ebf\u7a0b\u6c60<\/span><br \/>\n        TreadNs<span class=\"token operator\">::<\/span><span class=\"token class-name\">ThreadPool<\/span><span class=\"token operator\">&lt;<\/span>task_t<span class=\"token operator\">&gt;<\/span><span class=\"token operator\">::<\/span><span class=\"token function\">GetInstance<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">-&gt;<\/span><span class=\"token function\">Start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u6ce8\u518c\u9ed8\u8ba4\u670d\u52a1<\/span><br \/>\n        funcs<span class=\"token punctuation\">.<\/span><span class=\"token function\">insert<\/span><span class=\"token punctuation\">(<\/span>std<span class=\"token operator\">::<\/span><span class=\"token function\">make_pair<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;defaultService&#034;<\/span><span class=\"token punctuation\">,<\/span> std<span class=\"token operator\">::<\/span><span class=\"token function\">bind<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>TcpServer<span class=\"token operator\">::<\/span>DefaultService<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">,<\/span> std<span class=\"token operator\">::<\/span>placeholders<span class=\"token operator\">::<\/span>_1<span class=\"token punctuation\">,<\/span> std<span class=\"token operator\">::<\/span>placeholders<span class=\"token operator\">::<\/span>_2<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u5904\u7406\u5ba2\u6237\u7aef\u8bf7\u6c42<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">Service<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> sockfd<span class=\"token punctuation\">,<\/span> InetAddr <span class=\"token operator\">&amp;<\/span>addr<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">char<\/span> buff<span class=\"token punctuation\">[<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7f13\u51b2\u533a<\/span><br \/>\n        <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            ssize_t n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> buff<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>buff<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4ece\u5957\u63a5\u5b57\u8bfb\u53d6\u6570\u636e<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><br \/>\n                buff<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u5b57\u7b26\u4e32\u7ed3\u675f\u7b26<\/span><br \/>\n                cout <span class=\"token operator\">&lt;&lt;<\/span> addr<span class=\"token punctuation\">.<\/span><span class=\"token function\">PrintDebug<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;# &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> buff <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u5ba2\u6237\u7aef\u5730\u5740\u548c\u6d88\u606f<\/span><br \/>\n                string echo_string <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;server#:&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                echo_string <span class=\"token operator\">&#043;&#061;<\/span> buff<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6784\u9020\u56de\u663e\u5b57\u7b26\u4e32<\/span><br \/>\n                <span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> echo_string<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> echo_string<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u56de\u663e\u5b57\u7b26\u4e32\u5199\u56de\u5ba2\u6237\u7aef<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u503c\u4e3a0&#xff0c;\u8868\u793a\u5bf9\u7aef\u5173\u95ed\u4e86\u8fde\u63a5<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><br \/>\n                lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Info<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u5bf9\u7aef\u5173\u95ed\u4e86\u8fde\u63a5\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ed3\u675f\u5faa\u73af<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token keyword\">else<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><br \/>\n                lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Info<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u8bfb\u6d88\u606f\u5931\u8d25&#xff1a; %d, error string: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> errno<span class=\"token punctuation\">,<\/span> <span class=\"token function\">strerror<\/span><span class=\"token punctuation\">(<\/span>errno<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ed3\u675f\u5faa\u73af<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u542f\u52a8\u670d\u52a1\u5668<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">Start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        _isrunning <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u7f6e\u8fd0\u884c\u72b6\u6001\u4e3a\u771f<\/span><br \/>\n        <span class=\"token function\">signal<\/span><span class=\"token punctuation\">(<\/span>SIGCHLD<span class=\"token punctuation\">,<\/span> SIG_IGN<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5ffd\u7565\u5b50\u8fdb\u7a0b\u9000\u51fa\u4fe1\u53f7&#xff0c;\u4ee5\u514d\u4ea7\u751f\u50f5\u5c38\u8fdb\u7a0b<\/span><br \/>\n        <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span>_isrunning<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token comment\">\/\/ 4. \u83b7\u53d6\u8fde\u63a5<\/span><br \/>\n            <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr_in<\/span> peer<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b9a\u4e49\u5ba2\u6237\u7aef\u5730\u5740\u7ed3\u6784<\/span><br \/>\n            socklen_t len <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>peer<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5730\u5740\u7ed3\u6784\u4f53\u5927\u5c0f<\/span><br \/>\n            <span class=\"token keyword\">int<\/span> sockfd <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">accept<\/span><span class=\"token punctuation\">(<\/span>_listensock<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr<\/span> <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">&amp;<\/span>peer<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>len<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u63a5\u53d7\u8fde\u63a5<\/span><\/p>\n<p>            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>sockfd <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">{<\/span><br \/>\n                lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Warning<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u83b7\u53d6\u5957\u63a5\u5b57\u5931\u8d25: %d, error string: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> errno<span class=\"token punctuation\">,<\/span> <span class=\"token function\">strerror<\/span><span class=\"token punctuation\">(<\/span>errno<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ee7\u7eed\u5faa\u73af&#xff0c;\u7b49\u5f85\u4e0b\u4e00\u4e2a\u8fde\u63a5<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n            lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u83b7\u53d6\u5957\u63a5\u5b57\u6210\u529f: sockfd: %d&#034;<\/span><span class=\"token punctuation\">,<\/span> sockfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>            <span class=\"token comment\">\/\/ 5. \u63d0\u4f9b\u670d\u52a1<\/span><br \/>\n            InetAddr <span class=\"token function\">addr<\/span><span class=\"token punctuation\">(<\/span>peer<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c01\u88c5\u5ba2\u6237\u7aef\u5730\u5740<\/span><br \/>\n            task_t t <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">bind<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>TcpServer<span class=\"token operator\">::<\/span>Routine<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">,<\/span> sockfd<span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7ed1\u5b9a\u4efb\u52a1<\/span><br \/>\n            TreadNs<span class=\"token operator\">::<\/span><span class=\"token class-name\">ThreadPool<\/span><span class=\"token operator\">&lt;<\/span>task_t<span class=\"token operator\">&gt;<\/span><span class=\"token operator\">::<\/span><span class=\"token function\">GetInstance<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">-&gt;<\/span><span class=\"token function\">Push<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u4efb\u52a1\u63a8\u9001\u5230\u7ebf\u7a0b\u6c60<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u8bfb\u53d6\u6570\u636e<\/span><br \/>\n    string <span class=\"token function\">Read<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> sockfd<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">char<\/span> type<span class=\"token punctuation\">[<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6570\u636e\u7c7b\u578b\u7f13\u51b2\u533a<\/span><br \/>\n        ssize_t n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> type<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>type<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4ece\u5957\u63a5\u5b57\u8bfb\u53d6\u6570\u636e<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            type<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u5b57\u7b26\u4e32\u7ed3\u675f\u7b26<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u503c\u4e3a0&#xff0c;\u8868\u793a\u5bf9\u7aef\u5173\u95ed\u4e86\u8fde\u63a5<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Info<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u5bf9\u7aef\u5173\u95ed\u4e86\u8fde\u63a5\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Info<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u8bfb\u6d88\u606f\u5931\u8d25&#xff1a; %d, error string: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> errno<span class=\"token punctuation\">,<\/span> <span class=\"token function\">strerror<\/span><span class=\"token punctuation\">(<\/span>errno<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> type<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u8bfb\u53d6\u5230\u7684\u6570\u636e<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u5904\u7406\u4f8b\u7a0b<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">Routine<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> sockfd<span class=\"token punctuation\">,<\/span> InetAddr <span class=\"token operator\">&amp;<\/span>addr<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        funcs<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;defaultService&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8c03\u7528\u9ed8\u8ba4\u670d\u52a1<\/span><br \/>\n        string type <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">Read<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bfb\u53d6\u8bf7\u6c42\u7c7b\u578b<\/span><br \/>\n        lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;%s select %s \\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">.<\/span><span class=\"token function\">PrintDebug<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> type<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u6839\u636e\u8bf7\u6c42\u7c7b\u578b\u8c03\u7528\u76f8\u5e94\u7684\u670d\u52a1<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>type <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;ping&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            funcs<span class=\"token punctuation\">[<\/span>type<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5904\u7406 ping \u8bf7\u6c42<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>type <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;translate&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u7ffb\u8bd1\u670d\u52a1<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            funcs<span class=\"token punctuation\">[<\/span>type<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>type <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;transform&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u8f6c\u6362\u670d\u52a1<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            funcs<span class=\"token punctuation\">[<\/span>type<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token comment\">\/\/ \u5904\u7406\u5176\u4ed6\u7c7b\u578b\u8bf7\u6c42<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5173\u95ed\u5957\u63a5\u5b57<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u9ed8\u8ba4\u670d\u52a1<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">DefaultService<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> sockfd<span class=\"token punctuation\">,<\/span> InetAddr<span class=\"token operator\">&amp;<\/span> addr<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span><span class=\"token punctuation\">)<\/span>addr<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9632\u6b62\u672a\u4f7f\u7528\u8b66\u544a<\/span><br \/>\n        std<span class=\"token operator\">::<\/span>string service_list <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034; |&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">auto<\/span> func <span class=\"token operator\">:<\/span> funcs<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            service_list <span class=\"token operator\">&#043;&#061;<\/span> func<span class=\"token punctuation\">.<\/span>first<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u62fc\u63a5\u670d\u52a1\u5217\u8868<\/span><br \/>\n            service_list <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token string\">&#034;|&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> service_list<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> service_list<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u670d\u52a1\u5217\u8868\u5199\u56de\u5ba2\u6237\u7aef<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6ce8\u518c\u56de\u8c03\u51fd\u6570<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">RegisterFunc<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> string <span class=\"token operator\">&amp;<\/span>name<span class=\"token punctuation\">,<\/span> callback_t func<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        funcs<span class=\"token punctuation\">[<\/span>name<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> func<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u51fd\u6570\u6ce8\u518c\u5230\u5b57\u5178\u4e2d<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6790\u6784\u51fd\u6570<\/span><br \/>\n    <span class=\"token operator\">~<\/span><span class=\"token function\">TcpServer<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token comment\">\/\/ \u5728\u8fd9\u91cc\u53ef\u4ee5\u6dfb\u52a0\u8d44\u6e90\u6e05\u7406\u4ee3\u7801&#xff08;\u5982\u679c\u9700\u8981&#xff09;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token keyword\">uint16_t<\/span> _port<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u670d\u52a1\u5668\u7aef\u53e3<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> _listensock<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u76d1\u542c\u5957\u63a5\u5b57<\/span><br \/>\n    <span class=\"token keyword\">bool<\/span> _isrunning<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u670d\u52a1\u5668\u8fd0\u884c\u72b6\u6001<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u5b58\u50a8\u6ce8\u518c\u7684\u670d\u52a1\u51fd\u6570<\/span><br \/>\n    unordered_map<span class=\"token operator\">&lt;<\/span>string<span class=\"token punctuation\">,<\/span> callback_t<span class=\"token operator\">&gt;<\/span> funcs<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h4>2.2.10 Makefile<\/h4>\n<p>\u56e0\u4e3aMakefile\u6587\u4ef6\u7684\u4ee3\u7801\u6ce8\u91ca\u770b\u8d77\u00b7\u6765\u6bd4\u8f83\u4e71&#xff0c;\u6240\u4ee5\u6211\u5206\u4e24\u90e8\u5206\u653e\u51fa\u6765 \u65e0\u6ce8\u91ca\u4ee3\u7801<\/p>\n<p><span class=\"token punctuation\">.<\/span>PHONY<span class=\"token operator\">:<\/span>all<br \/>\nall<span class=\"token operator\">:<\/span>tcp_server tcp_client<\/p>\n<p>tcp_server<span class=\"token operator\">:<\/span>Main<span class=\"token punctuation\">.<\/span>cc<br \/>\ng<span class=\"token operator\">&#043;&#043;<\/span> <span class=\"token operator\">&#8211;<\/span>o $&#064; $<span class=\"token operator\">^<\/span> <span class=\"token operator\">&#8211;<\/span>lpthread <span class=\"token operator\">&#8211;<\/span>std<span class=\"token operator\">&#061;<\/span>c<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token number\">14<\/span><\/p>\n<p>tcp_client<span class=\"token operator\">:<\/span>Tcp_Client<span class=\"token punctuation\">.<\/span>cc<br \/>\ng<span class=\"token operator\">&#043;&#043;<\/span> <span class=\"token operator\">&#8211;<\/span>o $&#064; $<span class=\"token operator\">^<\/span> <span class=\"token operator\">&#8211;<\/span>lpthread <span class=\"token operator\">&#8211;<\/span>std<span class=\"token operator\">&#061;<\/span>c<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token number\">14<\/span><br \/>\n<span class=\"token punctuation\">.<\/span>PHONY<span class=\"token operator\">:<\/span>clean<br \/>\nclean<span class=\"token operator\">:<\/span><br \/>\nrm <span class=\"token operator\">&#8211;<\/span>f tcp_server tcp_client<\/p>\n<p>\u5e26\u6ce8\u91ca\u4ee3\u7801<\/p>\n<p><span class=\"token punctuation\">.<\/span>PHONY<span class=\"token operator\">:<\/span> all         # \u58f0\u660e <span class=\"token string\">&#039;all&#039;<\/span> \u662f\u4e00\u4e2a\u4f2a\u76ee\u6807&#xff0c;\u4e0d\u4f1a\u751f\u6210\u540c\u540d\u6587\u4ef6<br \/>\nall<span class=\"token operator\">:<\/span> tcp_server tcp_client  # \u9ed8\u8ba4\u76ee\u6807&#xff0c;\u6784\u5efa tcp_server \u548c tcp_client<\/p>\n<p># \u76ee\u6807 tcp_server \u7684\u6784\u5efa\u89c4\u5219<br \/>\ntcp_server<span class=\"token operator\">:<\/span> Main<span class=\"token punctuation\">.<\/span>cc   # \u6307\u5b9a\u4f9d\u8d56\u6587\u4ef6 Main<span class=\"token punctuation\">.<\/span>cc<br \/>\ng<span class=\"token operator\">&#043;&#043;<\/span> <span class=\"token operator\">&#8211;<\/span>o $&#064; $<span class=\"token operator\">^<\/span> <span class=\"token operator\">&#8211;<\/span>lpthread <span class=\"token operator\">&#8211;<\/span>std<span class=\"token operator\">&#061;<\/span>c<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token number\">14<\/span>  # \u4f7f\u7528 g<span class=\"token operator\">&#043;&#043;<\/span> \u7f16\u8bd1 Main<span class=\"token punctuation\">.<\/span>cc&#xff0c;\u751f\u6210\u53ef\u6267\u884c\u6587\u4ef6 tcp_server<br \/>\n# $&#064; \u8868\u793a\u76ee\u6807\u540d\u79f0&#xff08;tcp_server&#xff09;&#xff0c;$<span class=\"token operator\">^<\/span> \u8868\u793a\u6240\u6709\u4f9d\u8d56\u6587\u4ef6&#xff08;Main<span class=\"token punctuation\">.<\/span>cc&#xff09;<\/p>\n<p># \u76ee\u6807 tcp_client \u7684\u6784\u5efa\u89c4\u5219<br \/>\ntcp_client<span class=\"token operator\">:<\/span> Tcp_Client<span class=\"token punctuation\">.<\/span>cc  # \u6307\u5b9a\u4f9d\u8d56\u6587\u4ef6 Tcp_Client<span class=\"token punctuation\">.<\/span>cc<br \/>\ng<span class=\"token operator\">&#043;&#043;<\/span> <span class=\"token operator\">&#8211;<\/span>o $&#064; $<span class=\"token operator\">^<\/span> <span class=\"token operator\">&#8211;<\/span>lpthread <span class=\"token operator\">&#8211;<\/span>std<span class=\"token operator\">&#061;<\/span>c<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token number\">14<\/span>  # \u4f7f\u7528 g<span class=\"token operator\">&#043;&#043;<\/span> \u7f16\u8bd1 Tcp_Client<span class=\"token punctuation\">.<\/span>cc&#xff0c;\u751f\u6210\u53ef\u6267\u884c\u6587\u4ef6 tcp_client<br \/>\n# $&#064; \u8868\u793a\u76ee\u6807\u540d\u79f0&#xff08;tcp_client&#xff09;&#xff0c;$<span class=\"token operator\">^<\/span> \u8868\u793a\u6240\u6709\u4f9d\u8d56\u6587\u4ef6&#xff08;Tcp_Client<span class=\"token punctuation\">.<\/span>cc&#xff09;<\/p>\n<p><span class=\"token punctuation\">.<\/span>PHONY<span class=\"token operator\">:<\/span> clean      # \u58f0\u660e <span class=\"token string\">&#039;clean&#039;<\/span> \u662f\u4e00\u4e2a\u4f2a\u76ee\u6807&#xff0c;\u7528\u4e8e\u6e05\u7406\u6784\u5efa\u6587\u4ef6<br \/>\nclean<span class=\"token operator\">:<\/span>             # \u5b9a\u4e49\u6e05\u7406\u89c4\u5219<br \/>\nrm <span class=\"token operator\">&#8211;<\/span>f tcp_server tcp_client  # \u5220\u9664\u751f\u6210\u7684\u53ef\u6267\u884c\u6587\u4ef6 tcp_server \u548c tcp_client<\/p>\n<h4>2.2.11 Dict.txt<\/h4>\n<p>\u8bcd\u5178\u5355\u8bcd\u6570\u636e&#xff0c;\u53ef\u6309\u683c\u5f0f\u81ea\u884c\u6dfb\u52a0&#xff0c;\u6570\u91cf\u4e0d\u9650<\/p>\n<p>accident <span class=\"token punctuation\">[<\/span>&#039;\u00e6ksid\u0259nt<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span>\u4e8b\u6545&#xff0c;\u610f\u5916&#xff0c;\u5076\u7136<br \/>\ncareful  <span class=\"token punctuation\">[<\/span>&#039;ke\u0259ful<span class=\"token punctuation\">]<\/span>   a<span class=\"token punctuation\">.<\/span>\u4ed4\u7ec6<span class=\"token punctuation\">(<\/span>\u5c0f\u5fc3<span class=\"token punctuation\">)<\/span>\u7684<br \/>\ndifficulty  <span class=\"token punctuation\">[<\/span>&#039;difik\u0259lti<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span>\u56f0\u96be<br \/>\nflag  <span class=\"token punctuation\">[<\/span>fl\u00e6g<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span>\u65d7\u5e1c<br \/>\nhorse  <span class=\"token punctuation\">[<\/span>h\u0254<span class=\"token operator\">:<\/span>s<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span>\u9a6c<br \/>\nlock  <span class=\"token punctuation\">[<\/span>l\u0254k<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span><span class=\"token operator\">&amp;<\/span>v<span class=\"token punctuation\">.<\/span>\u9501<br \/>\nnut  <span class=\"token punctuation\">[<\/span>n\u028ct<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span>\u7ad6\u679c&#xff0c;\u87ba\u5e3d<br \/>\nrain  <span class=\"token punctuation\">[<\/span>rein<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span><span class=\"token operator\">&amp;<\/span>v<span class=\"token punctuation\">.<\/span>\u96e8&#xff0c;\u4e0b\u96e8<br \/>\nsilk  <span class=\"token punctuation\">[<\/span>silk<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span>\u4e1d&#xff0c;\u4e1d\u7ef8<br \/>\nthirty  <span class=\"token punctuation\">[<\/span>&#039;\u03b8\u0259<span class=\"token operator\">:<\/span>ti<span class=\"token punctuation\">]<\/span>   a<span class=\"token punctuation\">.<\/span><span class=\"token operator\">&amp;<\/span>n<span class=\"token punctuation\">.<\/span>\u4e09\u5341<span class=\"token punctuation\">(<\/span>\u4e2a<span class=\"token punctuation\">)<\/span><br \/>\naccidental  <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">.<\/span>\u00e6ksi<span class=\"token number\">&#039;<\/span>dentl<span class=\"token punctuation\">]<\/span>   a<span class=\"token punctuation\">.<\/span>\u610f\u5916\u7684&#xff0c;\u5076\u7136\u7684<br \/>\ncarrot  <span class=\"token punctuation\">[<\/span>&#039;k\u00e6r\u0259t<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span>\u80e1\u841d\u535c<br \/>\ndinner  <span class=\"token punctuation\">[<\/span>&#039;din\u0259<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span>\u6b63\u9910&#xff0c;\u665a\u9910<br \/>\nflat  <span class=\"token punctuation\">[<\/span>fl\u00e6t<span class=\"token punctuation\">]<\/span>   a<span class=\"token punctuation\">.<\/span>\u5e73\u7684&#xff0c;\u6241\u5e73\u7684&#xff1b;n<span class=\"token punctuation\">.<\/span>\u5957\u95f4<br \/>\nhospital  <span class=\"token punctuation\">[<\/span>&#039;h\u0254spitl<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span> \u533b\u9662<br \/>\nlonely  <span class=\"token punctuation\">[<\/span>&#039;l\u0259unli<span class=\"token punctuation\">]<\/span>   a<span class=\"token punctuation\">.<\/span>\u5b64\u5355\u7684&#xff0c;\u5b64\u5bc2\u7684&#xff0c;\u504f\u50fb\u7684<br \/>\nOceania  <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">.<\/span>\u0259u\u0283i<span class=\"token number\">&#039;<\/span>eini\u0259<span class=\"token punctuation\">]<\/span>   n<span class=\"token punctuation\">.<\/span>\u5927\u6d0b\u6d32<br \/>\nrainy  <span class=\"token punctuation\">[<\/span>&#039;reini<span class=\"token punctuation\">]<\/span>   a<span class=\"token punctuation\">.<\/span>\u591a\u96e8\u7684<br \/>\nsimple  <span class=\"token punctuation\">[<\/span>&#039;simpl<span class=\"token punctuation\">]<\/span>   a<span class=\"token punctuation\">.<\/span>\u7b80\u5355\u7684&#xff0c;\u5355\u7eaf\u7684&#xff0c;\u6734\u7d20\u7684<br \/>\nthough  <span class=\"token punctuation\">[<\/span>\u00f0\u0259u<span class=\"token punctuation\">]<\/span>   ad<span class=\"token punctuation\">.<\/span>\u53ef\u662f&#xff1b;conj<span class=\"token punctuation\">.<\/span>\u867d\u7136&#xff0c;\u5c3d\u7ba1<\/p>\n<h4>2.2.12 Main.cc<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span>            <span class=\"token comment\">\/\/ \u5f15\u5165\u8f93\u5165\u8f93\u51fa\u6d41\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;memory&gt;<\/span>              <span class=\"token comment\">\/\/ \u5f15\u5165\u667a\u80fd\u6307\u9488\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;algorithm&gt;<\/span>           <span class=\"token comment\">\/\/ \u5f15\u5165\u7b97\u6cd5\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;Log.hpp&#034;<\/span>            <span class=\"token comment\">\/\/ \u5f15\u5165\u65e5\u5fd7\u529f\u80fd<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;Tcp_Server.hpp&#034;<\/span>     <span class=\"token comment\">\/\/ \u5f15\u5165 TCP \u670d\u52a1\u5668\u7c7b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;Translate.hpp&#034;<\/span>      <span class=\"token comment\">\/\/ \u5f15\u5165\u7ffb\u8bd1\u7c7b<\/span><\/span><\/p>\n<p><span class=\"token keyword\">using<\/span> <span class=\"token keyword\">namespace<\/span> std<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4f7f\u7528\u6807\u51c6\u547d\u540d\u7a7a\u95f4<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u4f7f\u7528\u8bf4\u660e\u51fd\u6570<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">Usage<\/span><span class=\"token punctuation\">(<\/span>std<span class=\"token operator\">::<\/span>string proc<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;Usage : \\\\n\\\\t&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> proc <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; local_port\\\\n&#034;<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u7a0b\u5e8f\u4f7f\u7528\u8bf4\u660e<\/span><br \/>\n              <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token operator\">::<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>Translate trans<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521b\u5efa\u7ffb\u8bd1\u7c7b\u7684\u5b9e\u4f8b<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u4ea4\u4e92\u51fd\u6570&#xff0c;\u901a\u8fc7\u5957\u63a5\u5b57\u4e0e\u5ba2\u6237\u7aef\u8fdb\u884c\u901a\u4fe1<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">Interact<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> sockfd<span class=\"token punctuation\">,<\/span> string <span class=\"token operator\">&amp;<\/span>out<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">const<\/span> string <span class=\"token operator\">&amp;<\/span>in<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">char<\/span> buff<span class=\"token punctuation\">[<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7f13\u51b2\u533a\u7528\u4e8e\u63a5\u6536\u6570\u636e<\/span><br \/>\n    ssize_t n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> buff<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>buff<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4ece\u5957\u63a5\u5b57\u8bfb\u53d6\u6570\u636e<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        buff<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u5b57\u7b26\u4e32\u7ed3\u675f\u7b26<\/span><br \/>\n        <span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> in<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> in<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u54cd\u5e94\u5199\u56de\u5ba2\u6237\u7aef<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u503c\u4e3a0&#xff0c;\u8868\u793a\u5bf9\u7aef\u5173\u95ed\u4e86\u8fde\u63a5<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Info<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u5bf9\u7aef\u5173\u95ed\u4e86\u8fde\u63a5\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Info<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u8bfb\u6d88\u606f\u5931\u8d25&#xff1a; %d, error string: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> errno<span class=\"token punctuation\">,<\/span> <span class=\"token function\">strerror<\/span><span class=\"token punctuation\">(<\/span>errno<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u5fc3\u8df3\u673a\u5236\u51fd\u6570&#xff0c;\u7528\u4e8e\u68c0\u6d4b\u670d\u52a1\u662f\u5426\u6b63\u5e38<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">Ping<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> sockfd<span class=\"token punctuation\">,<\/span> InetAddr addr<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;%s select %s success, fd : %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">.<\/span><span class=\"token function\">PrintDebug<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;ping&#034;<\/span><span class=\"token punctuation\">,<\/span> sockfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    string message<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7528\u4e8e\u5b58\u50a8\u54cd\u5e94\u6d88\u606f<\/span><br \/>\n    <span class=\"token function\">Interact<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> message<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;Pong&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4e0e\u5ba2\u6237\u7aef\u4ea4\u4e92&#xff0c;\u53d1\u9001 &#034;Pong&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u7ffb\u8bd1\u670d\u52a1\u51fd\u6570<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">Translate_S<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> sockfd<span class=\"token punctuation\">,<\/span> InetAddr addr<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;%s select %s success, fd : %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">.<\/span><span class=\"token function\">PrintDebug<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;Translate&#034;<\/span><span class=\"token punctuation\">,<\/span> sockfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">char<\/span> wordbuff<span class=\"token punctuation\">[<\/span><span class=\"token number\">128<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7f13\u51b2\u533a\u7528\u4e8e\u63a5\u6536\u5355\u8bcd<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> wordbuff<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>wordbuff<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4ece\u5957\u63a5\u5b57\u8bfb\u53d6\u5355\u8bcd<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> wordbuff<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u5b57\u7b26\u4e32\u7ed3\u675f\u7b26<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>string chinese <span class=\"token operator\">&#061;<\/span> trans<span class=\"token punctuation\">.<\/span><span class=\"token function\">Excute<\/span><span class=\"token punctuation\">(<\/span>wordbuff<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8c03\u7528\u7ffb\u8bd1\u529f\u80fd<\/span><br \/>\n    <span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> chinese<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> chinese<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u7ffb\u8bd1\u7ed3\u679c\u5199\u56de\u5ba2\u6237\u7aef<\/span><\/p>\n<p>    lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;%s Translate , %s -&gt; %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">.<\/span><span class=\"token function\">PrintDebug<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> wordbuff<span class=\"token punctuation\">,<\/span> chinese<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bb0\u5f55\u7ffb\u8bd1\u65e5\u5fd7<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u8f6c\u6362\u670d\u52a1\u51fd\u6570&#xff0c;\u5c06\u6d88\u606f\u8f6c\u6362\u4e3a\u5927\u5199<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">Transform<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> sockfd<span class=\"token punctuation\">,<\/span> InetAddr addr<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    lg<span class=\"token punctuation\">.<\/span><span class=\"token function\">LogMessage<\/span><span class=\"token punctuation\">(<\/span>Debug<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;%s select %s success, fd : %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> addr<span class=\"token punctuation\">.<\/span><span class=\"token function\">PrintDebug<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;Transform&#034;<\/span><span class=\"token punctuation\">,<\/span> sockfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">char<\/span> message<span class=\"token punctuation\">[<\/span><span class=\"token number\">128<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7f13\u51b2\u533a\u7528\u4e8e\u63a5\u6536\u6d88\u606f<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> message<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>message<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4ece\u5957\u63a5\u5b57\u8bfb\u53d6\u6d88\u606f<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> message<span class=\"token punctuation\">[<\/span>n<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u5b57\u7b26\u4e32\u7ed3\u675f\u7b26<\/span><br \/>\n    string messagebuf <span class=\"token operator\">&#061;<\/span> message<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32<\/span><br \/>\n    <span class=\"token function\">transform<\/span><span class=\"token punctuation\">(<\/span>messagebuf<span class=\"token punctuation\">.<\/span><span class=\"token function\">begin<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> messagebuf<span class=\"token punctuation\">.<\/span><span class=\"token function\">end<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> messagebuf<span class=\"token punctuation\">.<\/span><span class=\"token function\">begin<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">char<\/span> c<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token function\">toupper<\/span><span class=\"token punctuation\">(<\/span>c<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u5b57\u7b26\u8f6c\u6362\u4e3a\u5927\u5199<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>sockfd<span class=\"token punctuation\">,<\/span> messagebuf<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> messagebuf<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u8f6c\u6362\u540e\u7684\u6d88\u606f\u5199\u56de\u5ba2\u6237\u7aef<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> argc<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">char<\/span> <span class=\"token operator\">*<\/span>argv<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>argc <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u68c0\u67e5\u547d\u4ee4\u884c\u53c2\u6570\u6570\u91cf<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">Usage<\/span><span class=\"token punctuation\">(<\/span>argv<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u4f7f\u7528\u8bf4\u660e<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> Usage_Err<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u9519\u8bef\u4ee3\u7801<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">uint16_t<\/span> port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">stoi<\/span><span class=\"token punctuation\">(<\/span>argv<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u7aef\u53e3\u53f7\u4ece\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u6574\u578b<\/span><\/p>\n<p>    unique_ptr<span class=\"token operator\">&lt;<\/span>TcpServer<span class=\"token operator\">&gt;<\/span> tsvr <span class=\"token operator\">&#061;<\/span> make_unique<span class=\"token operator\">&lt;<\/span>TcpServer<span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span>port<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521b\u5efa TCP \u670d\u52a1\u5668\u5b9e\u4f8b<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6ce8\u518c\u670d\u52a1\u51fd\u6570<\/span><br \/>\n    tsvr<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">RegisterFunc<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ping&#034;<\/span><span class=\"token punctuation\">,<\/span> Ping<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    tsvr<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">RegisterFunc<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;translate&#034;<\/span><span class=\"token punctuation\">,<\/span> Translate_S<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    tsvr<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">RegisterFunc<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;transform&#034;<\/span><span class=\"token punctuation\">,<\/span> Transform<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    tsvr<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">Init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u670d\u52a1\u5668<\/span><\/p>\n<p>    tsvr<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">Start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u542f\u52a8\u670d\u52a1\u5668<\/span><\/p>\n<p>    <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7a0b\u5e8f\u6b63\u5e38\u7ed3\u675f<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>2.2.13 Tcp_Client.cc<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span>            <span class=\"token comment\">\/\/ \u5f15\u5165\u8f93\u5165\u8f93\u51fa\u6d41\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;string&gt;<\/span>              <span class=\"token comment\">\/\/ \u5f15\u5165\u5b57\u7b26\u4e32\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cerrno&gt;<\/span>              <span class=\"token comment\">\/\/ \u5f15\u5165\u9519\u8bef\u53f7\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstring&gt;<\/span>             <span class=\"token comment\">\/\/ \u5f15\u5165\u5b57\u7b26\u4e32\u5904\u7406\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/types.h&gt;<\/span>        <span class=\"token comment\">\/\/ \u5f15\u5165\u7cfb\u7edf\u6570\u636e\u7c7b\u578b<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/socket.h&gt;<\/span>       <span class=\"token comment\">\/\/ \u5f15\u5165\u5957\u63a5\u5b57\u76f8\u5173\u51fd\u6570<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;stdlib.h&gt;<\/span>           <span class=\"token comment\">\/\/ \u5f15\u5165\u6807\u51c6\u5e93<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;netinet\/in.h&gt;<\/span>       <span class=\"token comment\">\/\/ \u5f15\u5165\u4e92\u8054\u7f51\u57df\u5957\u63a5\u5b57<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;arpa\/inet.h&gt;<\/span>        <span class=\"token comment\">\/\/ \u5f15\u5165\u5730\u5740\u8f6c\u6362\u51fd\u6570<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;unistd.h&gt;<\/span>           <span class=\"token comment\">\/\/ \u5f15\u5165 UNIX \u6807\u51c6\u51fd\u6570<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;signal.h&gt;<\/span>           <span class=\"token comment\">\/\/ \u5f15\u5165\u4fe1\u53f7\u5904\u7406\u5e93<\/span><\/span><\/p>\n<p><span class=\"token keyword\">using<\/span> <span class=\"token keyword\">namespace<\/span> std<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4f7f\u7528\u6807\u51c6\u547d\u540d\u7a7a\u95f4<\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">Retry_count<\/span> <span class=\"token expression\"><span class=\"token number\">5<\/span> <\/span><span class=\"token comment\">\/\/ \u5b9a\u4e49\u6700\u5927\u91cd\u8bd5\u6b21\u6570<\/span><\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u4fe1\u53f7\u5904\u7406\u51fd\u6570<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">handler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> signo<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;signo: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> signo <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token operator\">::<\/span>endl<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u63a5\u6536\u5230\u7684\u4fe1\u53f7\u7f16\u53f7<\/span><br \/>\n    <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9000\u51fa\u7a0b\u5e8f<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u8f93\u51fa\u7a0b\u5e8f\u7684\u4f7f\u7528\u8bf4\u660e<\/span><br \/>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">Usage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token operator\">::<\/span>string <span class=\"token operator\">&amp;<\/span>process<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    std<span class=\"token operator\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;Usage: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> process <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; &#043; server_ip &#043; server_port&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token operator\">::<\/span>endl<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6307\u5bfc\u7528\u6237\u5982\u4f55\u4f7f\u7528\u7a0b\u5e8f<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u8bbf\u95ee\u670d\u52a1\u5668\u7684\u51fd\u6570<\/span><br \/>\n<span class=\"token keyword\">bool<\/span> <span class=\"token function\">visitServer<\/span><span class=\"token punctuation\">(<\/span>string <span class=\"token operator\">&amp;<\/span>server_ip<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">uint16_t<\/span> <span class=\"token operator\">&amp;<\/span>server_port<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> <span class=\"token operator\">*<\/span>cnt<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ 1. \u521b\u5efa\u5957\u63a5\u5b57<\/span><br \/>\n    string inbuffer<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f93\u5165\u7f13\u51b2\u533a\u7528\u4e8e\u63a5\u6536\u7528\u6237\u8f93\u5165<\/span><br \/>\n    <span class=\"token keyword\">char<\/span> service_list<span class=\"token punctuation\">[<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7f13\u51b2\u533a\u7528\u4e8e\u5b58\u50a8\u670d\u52a1\u5217\u8868<\/span><br \/>\n    ssize_t m <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bfb\u53d6\u5b57\u8282\u6570<\/span><br \/>\n    ssize_t n <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5199\u5165\u5b57\u8282\u6570<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> sock <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">socket<\/span><span class=\"token punctuation\">(<\/span>AF_INET<span class=\"token punctuation\">,<\/span> SOCK_STREAM<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521b\u5efa TCP \u5957\u63a5\u5b57<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>sock <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        cerr <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;socket error&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bb0\u5f55\u9519\u8bef\u4fe1\u606f<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u5931\u8d25<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">bool<\/span> ret <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u8fd4\u56de\u503c\u4e3a\u771f<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ 2. \u5efa\u7acb\u8fde\u63a5<\/span><br \/>\n    <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr_in<\/span> server<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5b9a\u4e49\u670d\u52a1\u5668\u5730\u5740\u7ed3\u6784<\/span><br \/>\n    server<span class=\"token punctuation\">.<\/span>sin_family <span class=\"token operator\">&#061;<\/span> AF_INET<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4f7f\u7528 IPv4<\/span><br \/>\n    server<span class=\"token punctuation\">.<\/span>sin_port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">htons<\/span><span class=\"token punctuation\">(<\/span>server_port<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u7f6e\u7aef\u53e3\u53f7<\/span><br \/>\n    <span class=\"token function\">inet_pton<\/span><span class=\"token punctuation\">(<\/span>AF_INET<span class=\"token punctuation\">,<\/span> server_ip<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>server<span class=\"token punctuation\">.<\/span>sin_addr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06 IP \u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u7f51\u7edc\u5b57\u8282\u5e8f<\/span><\/p>\n<p>    socklen_t len<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7528\u4e8e\u5b58\u50a8\u5730\u5740\u957f\u5ea6<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> nn <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">connect<\/span><span class=\"token punctuation\">(<\/span>sock<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr<\/span> <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">&amp;<\/span>server<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>server<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c1d\u8bd5\u8fde\u63a5\u670d\u52a1\u5668<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>nn <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        cerr <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;connect error&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bb0\u5f55\u8fde\u63a5\u9519\u8bef\u4fe1\u606f<\/span><br \/>\n        ret <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u7f6e\u8fd4\u56de\u503c\u4e3a\u5047<\/span><br \/>\n        <span class=\"token keyword\">goto<\/span> END<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8df3\u8f6c\u5230\u7ed3\u675f\u6807\u7b7e<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token operator\">*<\/span>cnt <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u91cd\u8bd5\u8ba1\u6570<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u8bfb\u53d6\u670d\u52a1\u5668\u63d0\u4f9b\u7684\u670d\u52a1\u5217\u8868<\/span><br \/>\n    m <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span>sock<span class=\"token punctuation\">,<\/span> service_list<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>service_list<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4ece\u5957\u63a5\u5b57\u8bfb\u53d6\u670d\u52a1\u5217\u8868<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>m <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        service_list<span class=\"token punctuation\">[<\/span>m<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u5b57\u7b26\u4e32\u7ed3\u675f\u7b26<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\u670d\u52a1\u5668\u63d0\u4f9b\u7684\u670d\u52a1\u5217\u8868&#xff1a;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> service_list <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u670d\u52a1\u5217\u8868<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u9009\u62e9\u670d\u52a1<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\u8bf7\u9009\u62e9\u670d\u52a1&#xff1a;&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u63d0\u793a\u7528\u6237\u9009\u62e9\u670d\u52a1<\/span><br \/>\n    <span class=\"token function\">getline<\/span><span class=\"token punctuation\">(<\/span>cin<span class=\"token punctuation\">,<\/span> inbuffer<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bfb\u53d6\u7528\u6237\u8f93\u5165\u7684\u670d\u52a1\u540d\u79f0<\/span><br \/>\n    <span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>sock<span class=\"token punctuation\">,<\/span> inbuffer<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> inbuffer<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u7528\u6237\u9009\u62e9\u5199\u5165\u5957\u63a5\u5b57<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u8fdb\u884c\u901a\u4fe1<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165&#xff1a;&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u63d0\u793a\u7528\u6237\u8f93\u5165\u6d88\u606f<\/span><br \/>\n    <span class=\"token function\">getline<\/span><span class=\"token punctuation\">(<\/span>cin<span class=\"token punctuation\">,<\/span> inbuffer<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bfb\u53d6\u7528\u6237\u8f93\u5165<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>inbuffer <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;quit&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u68c0\u67e5\u7528\u6237\u662f\u5426\u8f93\u5165 &#034;quit&#034;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u6210\u529f&#xff0c;\u8868\u793a\u7ed3\u675f\u901a\u4fe1<\/span><\/p>\n<p>    n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">write<\/span><span class=\"token punctuation\">(<\/span>sock<span class=\"token punctuation\">,<\/span> inbuffer<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> inbuffer<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u7528\u6237\u8f93\u5165\u5199\u5165\u5957\u63a5\u5b57<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">char<\/span> buff<span class=\"token punctuation\">[<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7f13\u51b2\u533a\u7528\u4e8e\u63a5\u6536\u670d\u52a1\u5668\u54cd\u5e94<\/span><br \/>\n        ssize_t m <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">read<\/span><span class=\"token punctuation\">(<\/span>sock<span class=\"token punctuation\">,<\/span> buff<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>buff<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u4ece\u5957\u63a5\u5b57\u8bfb\u53d6\u54cd\u5e94<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>m <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            buff<span class=\"token punctuation\">[<\/span>m<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u6dfb\u52a0\u5b57\u7b26\u4e32\u7ed3\u675f\u7b26<\/span><br \/>\n            cout <span class=\"token operator\">&lt;&lt;<\/span> buff <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u670d\u52a1\u5668\u54cd\u5e94<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>m <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u5982\u679c\u8fd4\u56de\u503c\u4e3a0&#xff0c;\u8868\u793a\u670d\u52a1\u5668\u5173\u95ed\u4e86\u8fde\u63a5<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u6210\u529f<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            ret <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u7f6e\u8fd4\u56de\u503c\u4e3a\u5047<\/span><br \/>\n            <span class=\"token keyword\">goto<\/span> END<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8df3\u8f6c\u5230\u7ed3\u675f\u6807\u7b7e<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        ret <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbe\u7f6e\u8fd4\u56de\u503c\u4e3a\u5047<\/span><br \/>\n        <span class=\"token keyword\">goto<\/span> END<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8df3\u8f6c\u5230\u7ed3\u675f\u6807\u7b7e<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>END<span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>sock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5173\u95ed\u5957\u63a5\u5b57<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> ret<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u7ed3\u679c<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> argc<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">char<\/span> <span class=\"token operator\">*<\/span>argv<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>argc <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u68c0\u67e5\u547d\u4ee4\u884c\u53c2\u6570\u6570\u91cf<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">Usage<\/span><span class=\"token punctuation\">(<\/span>argv<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u4f7f\u7528\u8bf4\u660e<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8fd4\u56de\u9519\u8bef\u4ee3\u7801<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    string server_ip <span class=\"token operator\">&#061;<\/span> argv<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u83b7\u53d6\u670d\u52a1\u5668 IP \u5730\u5740<\/span><br \/>\n    <span class=\"token keyword\">uint16_t<\/span> server_port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">stoi<\/span><span class=\"token punctuation\">(<\/span>argv<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5c06\u7aef\u53e3\u53f7\u4ece\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u6574\u578b<\/span><br \/>\n    <span class=\"token function\">signal<\/span><span class=\"token punctuation\">(<\/span>SIGPIPE<span class=\"token punctuation\">,<\/span> SIG_IGN<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5ffd\u7565 SIGPIPE \u4fe1\u53f7<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> cnt <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u521d\u59cb\u5316\u91cd\u8bd5\u8ba1\u6570<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u5c1d\u8bd5\u8bbf\u95ee\u670d\u52a1\u5668<\/span><br \/>\n    <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span>cnt <span class=\"token operator\">&lt;&#061;<\/span> Retry_count<span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u5728\u91cd\u8bd5\u6b21\u6570\u8303\u56f4\u5185\u5faa\u73af<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">bool<\/span> result <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">visitServer<\/span><span class=\"token punctuation\">(<\/span>server_ip<span class=\"token punctuation\">,<\/span> server_port<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>cnt<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8bbf\u95ee\u670d\u52a1\u5668<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>result<span class=\"token punctuation\">)<\/span> <span class=\"token comment\">\/\/ \u5982\u679c\u8bbf\u95ee\u6210\u529f<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9000\u51fa\u5faa\u73af<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token function\">sleep<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7b49\u5f85 1 \u79d2<\/span><br \/>\n            cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\u6b63\u5728\u5c1d\u8bd5\u91cd\u8fde\u4e2d&#8230;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> cnt <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u8f93\u51fa\u91cd\u8fde\u4fe1\u606f<\/span><br \/>\n            cnt<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u589e\u52a0\u91cd\u8bd5\u8ba1\u6570<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7a0b\u5e8f\u6b63\u5e38\u7ed3\u675f<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb1.5k\u6b21\uff0c\u70b9\u8d5e15\u6b21\uff0c\u6536\u85cf12\u6b21\u3002Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09_tcp server<\/p>\n","protected":false},"author":2,"featured_media":28484,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[868,55,58,2290,1813,43,78,191],"topic":[],"class_list":{"0":"post-28495","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-server","8":"tag-868","9":"tag-c","10":"tag-linux","12":"tag-1813","13":"tag-43","14":"tag-78","15":"tag-191"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/28495.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb1.5k\u6b21\uff0c\u70b9\u8d5e15\u6b21\uff0c\u6536\u85cf12\u6b21\u3002Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09_tcp server\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/28495.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-19T16:41:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164110-6803d226e17c1.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/28495.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/28495.html\",\"name\":\"Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2025-04-19T16:41:14+00:00\",\"dateModified\":\"2025-04-19T16:41:14+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/28495.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/28495.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/28495.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/28495.html","og_locale":"zh_CN","og_type":"article","og_title":"Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb1.5k\u6b21\uff0c\u70b9\u8d5e15\u6b21\uff0c\u6536\u85cf12\u6b21\u3002Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09_tcp server","og_url":"https:\/\/www.wsisp.com\/helps\/28495.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2025-04-19T16:41:14+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250419164110-6803d226e17c1.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"17 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/28495.html","url":"https:\/\/www.wsisp.com\/helps\/28495.html","name":"Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2025-04-19T16:41:14+00:00","dateModified":"2025-04-19T16:41:14+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/28495.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/28495.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/28495.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"Tcp_Sever\uff08\u7ebf\u7a0b\u6c60\u7248\u672c\u7684 TCP \u670d\u52a1\u5668\uff09"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/28495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=28495"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/28495\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/28484"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=28495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=28495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=28495"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=28495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}