{"id":23219,"date":"2025-04-19T07:17:55","date_gmt":"2025-04-18T23:17:55","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/23219.html"},"modified":"2025-04-19T07:17:55","modified_gmt":"2025-04-18T23:17:55","slug":"net-5-udp_dict_server-%e5%9f%ba%e4%ba%8eudp%e7%9a%84%e7%ae%80%e5%8d%95%e5%ad%97%e5%85%b8%e7%bf%bb%e8%af%91%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8e%e4%b8%9a%e5%8a%a1%e7%9b%b8%e5%88%86%e7%a6%bb","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/23219.html","title":{"rendered":"[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb)"},"content":{"rendered":"<p id=\"main-toc\">\u76ee\u5f55<\/p>\n<p id=\"-toc\" style=\"margin-left:40px\">\n<p id=\"lxFG9-toc\" style=\"margin-left:40px\">1. \u529f\u80fd\u4e86\u89e3<\/p>\n<p id=\"De3xo-toc\" style=\"margin-left:80px\">1.1. \u5565\u662f dic_server?<\/p>\n<p id=\"noplE-toc\" style=\"margin-left:80px\">1.2. dic_server \u7684\u5c0f\u76ee\u6807<\/p>\n<p id=\"UHQRV-toc\" style=\"margin-left:40px\">2. \u57fa\u672c\u6846\u67b6<\/p>\n<p id=\"Frgdj-toc\" style=\"margin-left:80px\">2.1. \u57fa\u672c\u6587\u4ef6\u6846\u67b6<\/p>\n<p id=\"VOR90-toc\" style=\"margin-left:80px\">2.2. \u4e1a\u52a1\u4e0e\u670d\u52a1\u5668\u89e3\u8026 -&gt; \u56de\u8c03\u51fd\u6570<\/p>\n<p id=\"JZWDF-toc\" style=\"margin-left:40px\">3. \u5b57\u5178<\/p>\n<p id=\"qhZnD-toc\" style=\"margin-left:80px\">3.1. \u5b57\u5178\u914d\u7f6e\u6587\u4ef6<\/p>\n<p id=\"LiqNs-toc\" style=\"margin-left:80px\">3.2. \u6784\u5efa\u5b57\u5178\u7c7b<\/p>\n<p id=\"p0XFK-toc\" style=\"margin-left:120px\">3.2.1. \u5b57\u5178\u7c7b\u7684\u57fa\u672c\u6210\u5458<\/p>\n<p id=\"ZN7XQ-toc\" style=\"margin-left:120px\">3.2.2. \u5b57\u5178\u7c7b\u6784\u9020<\/p>\n<p id=\"KjhRi-toc\" style=\"margin-left:160px\">3.2.2.1. \u6784\u9020<\/p>\n<p id=\"sU2kD-toc\" style=\"margin-left:160px\">3.2.2.2. \u4fe1\u606f\u52a0\u8f7d<\/p>\n<p id=\"szfht-toc\" style=\"margin-left:200px\">3.2.2.2.1. \u5148\u6253\u5f00\u6587\u4ef6:<\/p>\n<p id=\"qUEcM-toc\" style=\"margin-left:200px\">3.2.2.2.2. \u5982\u679c\u6253\u5f00\u5931\u8d25\u4e86\u5462?<\/p>\n<p id=\"iVQwB-toc\" style=\"margin-left:200px\">3.2.2.2.3. \u6253\u5f00\u6210\u529f\u5462?<\/p>\n<p id=\"zydqV-toc\" style=\"margin-left:200px\">3.2.2.2.4. \u6700\u540e\u8bb0\u5f97\u5173\u95ed\u6587\u4ef6\u63cf\u8ff0\u7b26 -&gt; \u9632\u6b62\u8d44\u6e90\u6cc4\u9732<\/p>\n<p id=\"TAk6E-toc\" style=\"margin-left:120px\">3.2.3. dict::translate()<\/p>\n<p id=\"eQWgA-toc\" style=\"margin-left:160px\">3.2.3.1. \u67e5\u627e\u4e00\u4e2a\u7a7a\u5355\u8bcd?<\/p>\n<p id=\"mvh1V-toc\" style=\"margin-left:160px\">3.2.3.2. \u5982\u679c\u6ca1\u67e5\u5230?<\/p>\n<p id=\"QiEVw-toc\" style=\"margin-left:160px\">3.2.3.3. \u5982\u679c\u67e5\u5230\u4e86?<\/p>\n<p id=\"ykiq4-toc\" style=\"margin-left:80px\">3.3. \u5b57\u5178\u670d\u52a1 \u4e0e \u670d\u52a1\u5668\u76f8\u5173\u8054<\/p>\n<p id=\"Ag86C-toc\" style=\"margin-left:80px\">3.4. \u6d4b\u8bd5\u4e00\u4e0b<\/p>\n<p id=\"dbtPU-toc\" style=\"margin-left:40px\">4. \u53c2\u8003\u4ee3\u7801<\/p>\n<p id=\"GKq2Q-toc\" style=\"margin-left:80px\">4.1. \u6838\u5fc3\u4ee3\u7801<\/p>\n<p id=\"q5vmY-toc\" style=\"margin-left:80px\">4.2. \u5176\u4ed6\u4ee3\u7801<\/p>\n<hr id=\"hr-toc\" \/>\n<p>\u76ee\u6807:\u00a0<\/p>\n<ul>\n<li>\u57fa\u4e8eudp\u7684\u670d\u52a1\u5668\u63a5\u53e3\u57fa\u672c\u8ba4\u8bc6<\/li>\n<li>\u5b9e\u73b0\u670d\u52a1\u5668(\u6536\u6d88\u606f\u53d1\u6d88\u606f) \u4e0e \u4e1a\u52a1(\u7ffb\u8bd1\u4e1a\u52a1)\u7684\u5206\u79bb\u903b\u8f91 -&gt; \u901a\u8fc7\u56de\u8c03\u51fd\u6570\u5b9e\u73b0.\u00a0<\/li>\n<\/ul>\n<h3 id=\"lxFG9\">1. \u529f\u80fd\u4e86\u89e3<\/h3>\n<h4 id=\"De3xo\">1.1. \u5565\u662f dic_server?<\/h4>\n<p id=\"ue4397887\">dic_server: \u57fa\u4e8e udp \u5957\u63a5\u5b57\u7684\u57fa\u672c\u4e1a\u52a1 -&gt; \u82f1\u6c49\u7ffb\u8bd1.<\/p>\n<p id=\"ueb336800\">\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"668\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231752-6802dda02004b.png\" width=\"897\" \/><\/p>\n<h4 id=\"noplE\">1.2. dic_server \u7684\u5c0f\u76ee\u6807<\/h4>\n<li id=\"u0339dae7\">\u7136\u540e\u6211\u4eec\u505a\u4e00\u4e2a\u6587\u4ef6\u6027\u7684\u8bcd\u5178, \u800c\u975e\u5185\u5b58\u7ea7(\u6b63\u5e38\u6765\u8bf4\u7a0d\u5fae\u5927\u4e00\u70b9\u7684\u4e1c\u897f\u90fd\u4e0d\u4f1a\u505a\u6210\u5185\u5b58\u7ea7\u7684).<\/li>\n<li id=\"udd50107b\">\u4e00\u822c\u670d\u52a1\u5668\u4e3b\u8981\u662f\u7528\u6765\u8fdb\u884c\u7f51\u7edc\u6570\u636e\u8bfb\u53d6\u548c\u5199\u5165\u7684, \u6240\u4ee5\u8bf4\u5f88\u591a\u670d\u52a1\u5668\u5c31\u662f\u8fdb\u884c IO \u7684. \u800c\u6211\u4eec\u7684\u670d\u52a1\u5668\u5e0c\u671b\u53ef\u4ee5 IO \u903b\u8f91 \u548c \u4e1a\u52a1\u903b\u8f91\u8fdb\u884c\u89e3\u8026.<\/li>\n<h3 id=\"UHQRV\">2. \u57fa\u672c\u6846\u67b6<\/h3>\n<h4 id=\"Frgdj\">2.1. \u57fa\u672c\u6587\u4ef6\u6846\u67b6<\/h4>\n<p id=\"u7bdffce9\">\u4e3a\u4e86\u65b9\u4fbf, \u6211\u4eec\u76f4\u63a5\u628a udp_echo_server \u7684\u4e00\u4e9b\u4ee3\u7801 CV \u8fc7\u6765\u5373\u53ef.<\/p>\n<p id=\"u065caff3\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"301\" id=\"u45352692\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231752-6802dda05dd2d.png\" width=\"301\" \/><\/p>\n<p id=\"uaa477a8f\">\n<h4 id=\"VOR90\">2.2. \u4e1a\u52a1\u4e0e\u670d\u52a1\u5668\u89e3\u8026 -&gt; \u56de\u8c03\u51fd\u6570<\/h4>\n<p id=\"u8aebc957\">\u7ea6\u5b9a: \u5ba2\u6237\u7aef\u53d1\u6765\u7684\u662f\u5355\u8bcd.<\/p>\n<p id=\"uf16a4224\">\u8fd9\u91cc\u4e3a\u4e86\u65b9\u4fbf\u89e3\u8026, \u6211\u4eec\u7528\u4e00\u4e0b\u5305\u88c5\u5668\u5305\u88c5\u51fd\u6570, \u6765\u8fbe\u5230\u65b9\u4fbf\u7c7b\u578b\u7edf\u4e00\u7684\u76ee\u7684.<\/p>\n<p id=\"u166d0221\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"90\" id=\"u405e904d\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231752-6802dda07a70a.png\" width=\"702\" \/><\/p>\n<p id=\"udc724f15\">\u6ce8\u610f: \u53c2\u6570\u662f\u975econst\u53c2\u6570.<\/p>\n<p id=\"u5e471862\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"238\" id=\"u1a2d9e1c\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231752-6802dda095b56.png\" width=\"751\" \/><\/p>\n<p id=\"ub144a5d0\">\u5982\u4f55\u7528\u5462? \u7528\u6237\u4f20\u5bf9\u5e94\u7684\u4e1a\u52a1\u7ed9\u670d\u52a1\u5668, \u8fd9\u6837\u5c31\u5b9e\u73b0\u89e3\u8026\u4e86(\u5b9e\u73b0\u7684\u662f\u4e1a\u52a1\u548c\u670d\u52a1\u5668\u4e4b\u95f4\u7684\u903b\u8f91\u89e3\u8026). <\/p>\n<p id=\"u68e8068d\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"330\" id=\"u6492f57d\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231752-6802dda0b4047.png\" width=\"744\" \/><\/p>\n<p id=\"ubb42287e\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"624\" id=\"u835ff2ae\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231752-6802dda0d31dd.png\" width=\"993\" \/><\/p>\n<p id=\"u9ac7cc20\">\u56de\u8c03\u51fd\u6570\u8c03\u7528\u5b8c\u6210\u4e4b\u540e, \u6211\u4eec\u670d\u52a1\u5668\u518d\u8fd4\u56de\u5373\u53ef.<\/p>\n<p id=\"u63aeaf66\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"396\" id=\"u74bac0ac\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231753-6802dda11b9de.png\" width=\"951\" \/><\/p>\n<h3 id=\"JZWDF\">3. \u5b57\u5178<\/h3>\n<h4 id=\"qhZnD\">3.1. \u5b57\u5178\u914d\u7f6e\u6587\u4ef6<\/h4>\n<p id=\"ufd3ce4c4\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"507\" id=\"ueb257faa\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231753-6802dda14bf3e.png\" width=\"543\" \/><\/p>\n<h4 id=\"LiqNs\">3.2. \u6784\u5efa\u5b57\u5178\u7c7b<\/h4>\n<h5 id=\"p0XFK\">3.2.1. \u5b57\u5178\u7c7b\u7684\u57fa\u672c\u6210\u5458<\/h5>\n<p id=\"u0addb7a7\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"192\" id=\"u096746cc\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231753-6802dda171b2f.png\" width=\"358\" \/><\/p>\n<p id=\"u01705905\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"214\" id=\"u72b9a444\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231753-6802dda18f022.png\" width=\"603\" \/><\/p>\n<p id=\"ufbeac7d7\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"139\" id=\"u2b46d4e1\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231753-6802dda1abfc9.png\" width=\"676\" \/><\/p>\n<h5 id=\"ZN7XQ\">3.2.2. \u5b57\u5178\u7c7b\u6784\u9020<\/h5>\n<h6 id=\"KjhRi\">3.2.2.1. \u6784\u9020<\/h6>\n<p id=\"uf93cc212\">\u544a\u8bc9\u6784\u9020\u914d\u7f6e\u6587\u4ef6\u8def\u5f84, \u7136\u540e\u5f00\u59cb\u52a0\u8f7d:<\/p>\n<p id=\"ua114ca7f\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"385\" id=\"u2cb2cdb0\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231753-6802dda1c6d1e.png\" width=\"729\" \/><\/p>\n<h6 id=\"sU2kD\">3.2.2.2. \u4fe1\u606f\u52a0\u8f7d<\/h6>\n<h6 id=\"szfht\">3.2.2.2.1. \u5148\u6253\u5f00\u6587\u4ef6:<\/h6>\n<p id=\"u99165437\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"219\" id=\"u27991f55\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231753-6802dda1e7934.png\" width=\"603\" \/><\/p>\n<h6 id=\"qUEcM\">3.2.2.2.2. \u5982\u679c\u6253\u5f00\u5931\u8d25\u4e86\u5462?<\/h6>\n<p id=\"u16d24459\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"334\" id=\"u79e1a877\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231754-6802dda21209d.png\" width=\"645\" \/><\/p>\n<p id=\"u3deb1830\">\u76f4\u63a5\u9000\u51fa, \u8fd9\u5c5e\u4e8e\u4e00\u4e2a FATAL \u9519\u8bef.<\/p>\n<h6 id=\"iVQwB\">3.2.2.2.3. \u6253\u5f00\u6210\u529f\u5462?<\/h6>\n<p id=\"u1b4b26c1\">\u6211\u4eec\u5f00\u59cb\u4ece\u6587\u4ef6\u4e2d\u8bfb\u53d6\u4fe1\u606f.<\/p>\n<p id=\"u0e02075e\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"169\" id=\"uebad2a3a\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231754-6802dda232466.png\" width=\"663\" \/><\/p>\n<p id=\"u573b26de\">\u6ce8\u610f: \u8fd9\u4e2a getline \u91cc\u9762\u5185\u7f6e\u4e86\u5f3a\u5236\u7c7b\u578b\u8f6c\u6362\u4e3a bool \u7684\u529f\u80fd, \u56e0\u6b64\u53ef\u4ee5\u7528\u5230 while \u5f53\u4e2d.<\/p>\n<p id=\"u3e54a945\">\n<p id=\"u8b992fb3\">\u5904\u7406&#034;\u5f02\u5e38&#034;:<\/p>\n<p id=\"u7f590df0\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"220\" id=\"ud661db46\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231754-6802dda24fcff.png\" width=\"682\" \/><\/p>\n<p id=\"ubb20ede2\">\n<p id=\"u994fe778\">\u5b9a\u4e49\u5206\u9694\u7b26:<\/p>\n<p id=\"ucdec00c6\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"273\" id=\"u3740ca58\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231754-6802dda26e780.png\" width=\"631\" \/><\/p>\n<p id=\"u7a06e793\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"255\" id=\"ubbbd6b28\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231754-6802dda28dfc6.png\" width=\"634\" \/><\/p>\n<p id=\"uafc76315\">\u5982\u679c\u6ca1\u6709\u627e\u5230\u5206\u9694\u7b26: \u54b1\u4eec\u76f4\u63a5 continue<\/p>\n<p id=\"u256402be\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"144\" id=\"uf3aa1417\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231754-6802dda2ad251.png\" width=\"558\" \/><\/p>\n<p id=\"uafce4fe3\">\u5982\u679c\u627e\u5230\u4e86, \u54b1\u4eec\u5c31\u622a\u53d6\u5b50\u4e32.<\/p>\n<p id=\"u06542b92\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"237\" id=\"ucfb5c97f\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231754-6802dda2c9ecb.png\" width=\"609\" \/><\/p>\n<p id=\"ud26ad1dd\">\u5982\u679c key \/ value \u4e3a\u7a7a, \u6211\u4eec\u4e5f\u8981 continue.<\/p>\n<p id=\"ufd08abf9\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"129\" id=\"u4f95384c\" src=\"2025-04-19qcrfvl1q5v2.png\" width=\"606\" \/><\/p>\n<p id=\"u616b2764\">\u6211\u4eec\u628a key-val \u63d2\u5165\u5230 _dict \u5f53\u4e2d.<\/p>\n<p id=\"u885966a0\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"241\" id=\"ua3f0b0c7\" src=\"2025-04-19ktyoiwyu1ad.png\" width=\"691\" \/><\/p>\n<p id=\"u24c88b85\">\n<p id=\"u6c9e42ba\">\u5230\u6700\u540e, \u6211\u4eec\u518d\u63d0\u793a\u4e00\u4e0b\u5373\u53ef:<\/p>\n<p id=\"ucdc7d36e\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"124\" id=\"ufa259e5d\" src=\"2025-04-19yjqhvx1fnz0.png\" width=\"550\" \/><\/p>\n<h6 id=\"zydqV\">3.2.2.2.4. \u6700\u540e\u8bb0\u5f97\u5173\u95ed\u6587\u4ef6\u63cf\u8ff0\u7b26 -&gt; \u9632\u6b62\u8d44\u6e90\u6cc4\u9732<\/h6>\n<p id=\"u502ef304\">in.close()<\/p>\n<h5 id=\"TAk6E\">3.2.3. dict::translate()<\/h5>\n<h6 id=\"eQWgA\">3.2.3.1. \u67e5\u627e\u4e00\u4e2a\u7a7a\u5355\u8bcd?<\/h6>\n<p id=\"u93091419\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"99\" id=\"u5b6c88ff\" src=\"2025-04-190gbgi1v0tb5.png\" width=\"510\" \/><\/p>\n<h6 id=\"mvh1V\">3.2.3.2. \u5982\u679c\u6ca1\u67e5\u5230?<\/h6>\n<p id=\"u4a5cc55e\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"87\" id=\"u0971c2d9\" src=\"2025-04-19i0kmrths4fk.png\" width=\"477\" \/><\/p>\n<h6 id=\"QiEVw\">3.2.3.3. \u5982\u679c\u67e5\u5230\u4e86?<\/h6>\n<p id=\"u8e57c47d\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"183\" id=\"ua74038f5\" src=\"2025-04-19ruwmvt15chg.png\" width=\"501\" \/><\/p>\n<h4 id=\"ykiq4\">3.3. \u5b57\u5178\u670d\u52a1 \u4e0e \u670d\u52a1\u5668\u76f8\u5173\u8054<\/h4>\n<p id=\"uf33e69af\">\u80af\u5b9a\u662f\u5728 UdpServerMain.cc \u5f53\u4e2d\u5b8c\u6210\u7684.<\/p>\n<p id=\"ubeba0f50\">\u9996\u5148\u6784\u5efa\u4e00\u4e2a\u5b57\u5178\u5bf9\u8c61:<\/p>\n<p id=\"u59500deb\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"166\" id=\"uc759aac8\" src=\"2025-04-19pc5ydvtmpcw.png\" width=\"811\" \/><\/p>\n<p id=\"u0ac0a3d3\">\u7136\u540e\u6211\u4eec\u670d\u52a1\u5668\u5f53\u4e2d\u9700\u8981\u4e00\u4e2a\u4ec0\u4e48\u7c7b\u578b\u7684\u56de\u8c03\u51fd\u6570?<\/p>\n<p id=\"u4280bf53\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"90\" id=\"ZVADy\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231752-6802dda07a70a.png\" width=\"702\" \/><\/p>\n<p id=\"u08708435\">\u6ce8\u610f: \u8fd9\u4e2a\u53c2\u6570\u662f\u975e const \u7684.<\/p>\n<p id=\"ud88f0d68\">\u4f46\u662f\u6211\u4eec dict \u5f53\u4e2d\u662f(this, string)\u7684, \u6240\u4ee5\u6211\u4eec\u7528 bind \u7ed1\u5b9a\u4e00\u4e0b.<\/p>\n<p id=\"u6fda0615\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"180\" id=\"uaa01307f\" src=\"2025-04-19hzddlhsy1dm.png\" width=\"847\" \/><\/p>\n<p id=\"u180c64a8\">\u4e4b\u540e, \u6211\u4eec\u518d\u628a\u8fd9\u4e2a\u51fd\u6570\u4f20\u7ed9\u6211\u4eec\u7684\u670d\u52a1\u5668\u5373\u53ef.<\/p>\n<p id=\"u14cc9745\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"145\" id=\"uf52a03d6\" src=\"2025-04-19uphkt34snyq.png\" width=\"961\" \/><\/p>\n<h4 id=\"Ag86C\">3.4. \u6d4b\u8bd5\u4e00\u4e0b<\/h4>\n<p id=\"u3b6bbb5c\">\u542f\u52a8\u670d\u52a1\u7aef, \u53d1\u73b0\u662f ok \u7684:<\/p>\n<p id=\"u7b10357f\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"487\" id=\"ue46b2b5c\" src=\"2025-04-19120gl4egonw.png\" width=\"850\" \/><\/p>\n<p id=\"uc34e0100\">\u542f\u52a8\u5ba2\u6237\u7aef, \u4e5f\u662f ok \u7684:<\/p>\n<p id=\"uf3d15fd7\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"111\" id=\"u6dfded17\" src=\"2025-04-19ysd0i4kd2sa.png\" width=\"661\" \/><\/p>\n<p id=\"uf269f7b8\">\n<p class=\"img-center\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"213\" id=\"u34a71205\" src=\"2025-04-195hbtjtlrtij.png\" width=\"652\" \/><\/p>\n<p id=\"u152253c8\">\n<h3 id=\"dbtPU\">4. \u53c2\u8003\u4ee3\u7801<\/h3>\n<h4 id=\"GKq2Q\">4.1. \u6838\u5fc3\u4ee3\u7801<\/h4>\n<p>#pragma once<\/p>\n<p>#include &lt;iostream&gt;<br \/>\n#include &lt;unistd.h&gt;<br \/>\n#include &lt;string&gt;<br \/>\n#include &lt;cstring&gt;<br \/>\n#include &lt;functional&gt;<br \/>\n#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/socket.h&gt;<br \/>\n#include &lt;netinet\/in.h&gt;<br \/>\n#include &lt;arpa\/inet.h&gt;<\/p>\n<p>#include &#034;nocopy.hpp&#034;<br \/>\n#include &#034;Log.hpp&#034;<br \/>\n#include &#034;InetAddr.hpp&#034;<\/p>\n<p>using namespace log_ns;<\/p>\n<p>static const int gsockfd &#061; -1;<br \/>\nstatic const uint16_t glocalport &#061; 8888;<\/p>\n<p>enum<br \/>\n{<br \/>\n    SOCKET_ERROR &#061; 1,<br \/>\n    BIND_ERROR<br \/>\n};<\/p>\n<p>\/\/ \u89e3\u8026\u5408: \u6211\u4eec\u7ea6\u5b9a, \u5ba2\u6237\u7aef\u7ed9\u6211\u4eec\u53d1\u8fc7\u6765\u7684\u662f\u4e00\u4e2a\u4e00\u4e2a\u7684\u5355\u8bcd(\u5b57\u7b26\u4e32), \u5bf9\u4e8e\u8fd9\u4e9b\u5b57\u7b26\u4e32<br \/>\n\/\/ \u6211\u4eec\u4e0d\u518d\u8ba9\u670d\u52a1\u5668\u5904\u7406\u4e86, \u800c\u662f\u8ba9\u670d\u52a1\u5668\u628a\u8fd9\u4e9b\u4efb\u52a1\u6d3e\u53d1\u7ed9\u53e6\u4e00\u4e2a\u51fd\u6570\u5b8c\u6210, \u4ece<br \/>\n\/\/ \u800c\u5b9e\u73b0\u89e3\u8026\u5408(\u4e1a\u52a1\u4e0e\u670d\u52a1\u5668\u901a\u4fe1\u89e3\u8026)!<br \/>\n\/\/ \u670d\u52a1\u5668: \u8d1f\u8d23 \u8bfb\u6570\u636e &#043; \u53d1\u6570\u636e.<br \/>\n\/\/ \u4e1a\u52a1: \u89e3\u8026, \u8d1f\u8d23\u5904\u7406\u6570\u636e.<br \/>\nusing func_t &#061; std::function&lt;std::string(std::string)&gt;;<br \/>\n\/\/ \u8fd9\u4e2a\u5c31\u7b97\u6211\u4eec\u7684\u4e1a\u52a1\u51fd\u6570, \u7528\u5305\u88c5\u5668\u8fdb\u884c\u4e86\u7c7b\u578b\u5305\u88c5, \u8bbe\u8ba1\u4e3a\u56de\u8c03\u51fd\u6570! <\/p>\n<p>\/\/ UdpServer user(&#034;192.1.1.1&#034;, 8899);<br \/>\n\/\/ \u4e00\u822c\u670d\u52a1\u5668\u4e3b\u8981\u662f\u7528\u6765\u8fdb\u884c\u7f51\u7edc\u6570\u636e\u8bfb\u53d6\u548c\u5199\u5165\u7684\u3002IO\u7684<br \/>\n\/\/ \u670d\u52a1\u5668IO\u903b\u8f91 \u548c \u4e1a\u52a1\u903b\u8f91 \u89e3\u8026<br \/>\nclass UdpServer : public nocopy<br \/>\n{<br \/>\npublic:<br \/>\n    UdpServer(func_t func, uint16_t localport &#061; glocalport)<br \/>\n        : _func(func),<br \/>\n          _sockfd(gsockfd),<br \/>\n          _localport(localport),<br \/>\n          _isrunning(false)<br \/>\n    {<br \/>\n    }<br \/>\n    void InitServer()<br \/>\n    {<br \/>\n        \/\/ 1. \u521b\u5efasocket\u6587\u4ef6<br \/>\n        _sockfd &#061; ::socket(AF_INET, SOCK_DGRAM, 0);<br \/>\n        if (_sockfd &lt; 0)<br \/>\n        {<br \/>\n            LOG(FATAL, &#034;socket error\\\\n&#034;);<br \/>\n            exit(SOCKET_ERROR);<br \/>\n        }<br \/>\n        LOG(DEBUG, &#034;socket create success, _sockfd: %d\\\\n&#034;, _sockfd); \/\/ 3<\/p>\n<p>        \/\/ 2. bind<br \/>\n        struct sockaddr_in local;<br \/>\n        memset(&amp;local, 0, sizeof(local));<br \/>\n        local.sin_family &#061; AF_INET;<br \/>\n        local.sin_port &#061; htons(_localport);<br \/>\n        \/\/ local.sin_addr.s_addr &#061; inet_addr(_localip.c_str()); \/\/ 1. \u9700\u89814\u5b57\u8282IP 2. \u9700\u8981\u7f51\u7edc\u5e8f\u5217\u7684IP &#8212; \u6682\u65f6<br \/>\n        local.sin_addr.s_addr &#061; INADDR_ANY; \/\/ \u670d\u52a1\u5668\u7aef&#xff0c;\u8fdb\u884c\u4efb\u610fIP\u5730\u5740\u7ed1\u5b9a<\/p>\n<p>        int n &#061; ::bind(_sockfd, (struct sockaddr *)&amp;local, sizeof(local));<br \/>\n        if (n &lt; 0)<br \/>\n        {<br \/>\n            LOG(FATAL, &#034;bind error\\\\n&#034;);<br \/>\n            exit(BIND_ERROR);<br \/>\n        }<br \/>\n        LOG(DEBUG, &#034;socket bind success\\\\n&#034;);<br \/>\n    }<br \/>\n    void Start()<br \/>\n    {<br \/>\n        _isrunning &#061; true;<br \/>\n        char inbuffer[1024];<br \/>\n        while (_isrunning)<br \/>\n        {<br \/>\n            struct sockaddr_in peer;<br \/>\n            socklen_t len &#061; sizeof(peer);<br \/>\n            ssize_t n &#061; recvfrom(_sockfd, inbuffer, sizeof(inbuffer) &#8211; 1, 0, (struct sockaddr *)&amp;peer, &amp;len);<br \/>\n            if (n &gt; 0)<br \/>\n            {<br \/>\n                InetAddr addr(peer);<br \/>\n                inbuffer[n] &#061; 0;<br \/>\n                \/\/ \u4e00\u4e2a\u4e00\u4e2a\u7684\u5355\u8bcd<br \/>\n                std::cout &lt;&lt; &#034;[&#034; &lt;&lt; addr.Ip() &lt;&lt; &#034;:&#034; &lt;&lt; addr.Port() &lt;&lt; &#034;]# &#034; &lt;&lt; inbuffer &lt;&lt; std::endl;<\/p>\n<p>                std::string result &#061; _func(inbuffer); \/\/ \u628a\u4efb\u52a1\u4ea4\u7ed9_func\u51fd\u6570, \u8ba9_func\u51fd\u6570\u5904\u7406, \u5904\u7406\u5b8c\u4e86\u6211\u4eec\u670d\u52a1\u5668\u518d\u7ed9\u4ed6\u53d1\u8fc7\u53bb.<br \/>\n                sendto(_sockfd, result.c_str(), result.size(), 0, (struct sockaddr *)&amp;peer, len);<br \/>\n            }<br \/>\n            else<br \/>\n            {<br \/>\n                std::cout &lt;&lt; &#034;recvfrom ,  error&#034; &lt;&lt; std::endl;<br \/>\n            }<br \/>\n        }<br \/>\n    }<br \/>\n    ~UdpServer()<br \/>\n    {<br \/>\n        if (_sockfd &gt; gsockfd)<br \/>\n            ::close(_sockfd);<br \/>\n    }<\/p>\n<p>private:<br \/>\n    int _sockfd;<br \/>\n    uint16_t _localport;<br \/>\n    \/\/ std::string _localip; \/\/ TODO:\u540e\u9762\u4e13\u95e8\u8981\u5904\u7406\u4e00\u4e0b\u8fd9\u4e2aIP<br \/>\n    bool _isrunning;<\/p>\n<p>    func_t _func; \/\/ \u4e1a\u52a1 -&gt; \u56de\u8c03\u51fd\u6570.<br \/>\n    \/\/ \u8fd9\u6837\u5199\u56de\u8c03\u7684\u597d\u5904\u5c31\u662f\u670d\u52a1\u5668\u4e0d\u9700\u8981\u5173\u5fc3\u4e1a\u52a1\u5982\u4f55\u5904\u7406, \u53ea\u9700\u8981\u4e86\u89e3\u670d\u52a1\u5668\u9700\u8981\u7ed9<br \/>\n    \/\/ \u4e1a\u52a1\u4ec0\u4e48\u4e1c\u897f, \u7136\u540e\u670d\u52a1\u5668\u9700\u8981\u8ba9\u4e1a\u52a1\u8fd4\u56de\u4ec0\u4e48\u4e1c\u897f\u5373\u53ef.<br \/>\n};<br \/>\n#include &#034;UdpServer.hpp&#034;<br \/>\n#include &#034;Dict.hpp&#034;<\/p>\n<p>#include &lt;memory&gt;<\/p>\n<p>\/\/ .\/udp_server local-port<br \/>\n\/\/ .\/udp_server 8888<br \/>\nint main(int argc, char *argv[])<br \/>\n{<br \/>\n    if(argc !&#061; 2)<br \/>\n    {<br \/>\n        std::cerr &lt;&lt; &#034;Usage: &#034; &lt;&lt; argv[0] &lt;&lt; &#034; local-port&#034; &lt;&lt; std::endl;<br \/>\n        exit(0);<br \/>\n    }<br \/>\n    uint16_t port &#061; std::stoi(argv[1]);<br \/>\n    EnableScreen();<\/p>\n<p>    Dict dict(&#034;.\/dict.txt&#034;); \/\/ \u6784\u5efa\u5b57\u5178 &#043; \u914d\u7f6e\u6587\u4ef6\u8def\u5f84\u8fdb\u884c\u914d\u7f6e\u52a0\u8f7d<br \/>\n    func_t translate &#061; std::bind(&amp;Dict::Translate, &amp;dict, std::placeholders::_1); \/\/ \u7ed1\u5b9a\u6210\u4e3a\u6307\u5b9a\u7c7b\u578b: string (string). <\/p>\n<p>    std::unique_ptr&lt;UdpServer&gt; usvr &#061; std::make_unique&lt;UdpServer&gt;(translate, port); \/\/C&#043;&#043;14\u7684\u6807\u51c6 -&gt; \u8fd9\u6837\u7684\u597d\u5904\u5c31\u662f, \u4e1a\u52a1\u4e0e\u670d\u52a1\u5668\u7aef\u7684\u89e3\u8026, \u8fd9\u6837\u4f60\u60f3\u6362\u4e00\u4e2a\u4e1a\u52a1, \u53ea\u9700\u8981\u4fee\u6539\u4e00\u4e0b\u4e1a\u52a1\u51fd\u6570\u6307\u5411\u5373\u53ef, \u5176\u4ed6\u5219\u4e0d\u7528\u4fee\u6539!<br \/>\n    usvr-&gt;InitServer();<br \/>\n    usvr-&gt;Start();<br \/>\n    return 0;<br \/>\n}<br \/>\n#pragma once<br \/>\n#include &lt;iostream&gt;<br \/>\n#include &lt;string&gt;<br \/>\n#include &lt;fstream&gt;<br \/>\n#include &lt;unordered_map&gt;<br \/>\n#include &lt;unistd.h&gt;<br \/>\n#include &#034;Log.hpp&#034;<br \/>\n\/*<br \/>\n* \u8fd9\u4e2a\u5b57\u5178\u7c7b, \u662f\u4e00\u4e2a\u4e1a\u52a1, \u7528\u6765\u628a\u670d\u52a1\u5668\u4ea4\u7ed9\u6211\u4eec\u7684\u5355\u8bcd, \u7ffb\u8bd1\u6210\u6c49\u8bed\u7ed9\u4ed6\u8fd4\u56de\u53bb.<br \/>\n* \u5176\u4e2d, \u6211\u4eec\u7684\u5b57\u5178\u9700\u8981\u4ece\u6587\u4ef6\u4e2d\u52a0\u8f7d\u5bf9\u5e94\u7684\u5355\u8bcd\u6570\u636e, \u662f\u4e00\u4e2a\u6587\u4ef6\u7ea7\u522b\u7684\u6570\u636e, \u800c\u975e<br \/>\n* \u5185\u5b58\u7ea7\u522b\u7684\u6570\u636e.<br \/>\n*\/<\/p>\n<p>using namespace log_ns;<br \/>\nconst static std::string sep &#061; &#034;: &#034;; \/\/ \u5b9a\u4e49\u5206\u9694\u7b26. <\/p>\n<p>\/\/ sad: \u60b2\u4f24\u7684<\/p>\n<p>class Dict<br \/>\n{<br \/>\nprivate:<br \/>\n    void LoadDict(const std::string &amp;path)<br \/>\n    {<br \/>\n        std::ifstream in(path); \/\/ \u6253\u5f00\u6587\u4ef6<br \/>\n        if (!in.is_open()) \/\/ \u6253\u5f00\u5931\u8d25\u4e86\u5c31\u4e0d\u53ef\u80fd\u5b8c\u6210\u4efb\u52a1, \u76f4\u63a5exit!<br \/>\n        {<br \/>\n            LOG(FATAL, &#034;open %s failed!\\\\n&#034;, path.c_str());<br \/>\n            exit(1);<br \/>\n        }<\/p>\n<p>        std::string line;<br \/>\n        while (std::getline(in, line)) \/\/ \u6ce8\u610f: cpp\u4e2d\u7684getline\u662f\u91cd\u8f7d\u4e86bool\u7c7b\u578b\u54e6~<br \/>\n        {<br \/>\n            LOG(DEBUG, &#034;load info: %s , success\\\\n&#034;, line.c_str());<br \/>\n            if (line.empty()) \/\/ \u907f\u514d\u7a7a\u884c.<br \/>\n                continue;<br \/>\n            auto pos &#061; line.find(sep);<br \/>\n            if (pos &#061;&#061; std::string::npos) \/\/ \u907f\u514d\u6ca1\u6709&#034;: &#034;\u7684\u60c5\u51b5.<br \/>\n                continue;<\/p>\n<p>            std::string key &#061; line.substr(0, pos);<br \/>\n            if (key.empty()) \/\/ \u5982\u679c\u53d1\u73b0key\u503c\u662f\u7a7a, \u76f4\u63a5\u5ffd\u7565.<br \/>\n                continue;<br \/>\n            std::string value &#061; line.substr(pos &#043; sep.size());<br \/>\n            if (value.empty()) \/\/ \u5982\u679c\u53d1\u73b0value\u503c\u662f\u7a7a, \u76f4\u63a5\u5ffd\u7565.<br \/>\n                continue;<\/p>\n<p>            _dict.insert(std::make_pair(key, value)); \/\/ \u7528\u54c8\u5e0c\u5c06\u6570\u636e\u7ec4\u7ec7\u8d77\u6765!<br \/>\n        }<br \/>\n        LOG(INFO, &#034;load %s done\\\\n&#034;, path.c_str());<br \/>\n        in.close();<br \/>\n    }<\/p>\n<p>public:<br \/>\n    \/\/ \u6784\u9020: \u6784\u9020\u7684\u65f6\u5019 \u81ea\u52a8 \u628a\u6240\u6709\u7684\u6587\u4ef6\u5c5e\u6027\u52a0\u8f7d\u5230\u54c8\u5e0c\u8868\u4e2d\u53bb!<br \/>\n    Dict(const std::string &amp;dict_path) : _dict_path(dict_path)<br \/>\n    {<br \/>\n        LoadDict(_dict_path); \/\/ \u81ea\u52a8\u52a0\u8f7d\u8d44\u6e90\u5230\u54c8\u5e0c\u8868\u7ec4\u7ec7\u8d77\u6765!<br \/>\n    }<br \/>\n    \/\/ \u7ffb\u8bd1<br \/>\n    std::string Translate(std::string word)<br \/>\n    {<br \/>\n        if(word.empty()) return &#034;None&#034;; \/\/ \u5982\u679c\u6ca1\u6709key\u503c, \u54b1\u4eec\u5c31\u8fd4\u56de&#034;None&#034;<br \/>\n        auto iter &#061; _dict.find(word);<br \/>\n        if(iter &#061;&#061; _dict.end()) return &#034;None&#034;; \/\/ \u6ca1\u6709\u67e5\u5230, \u54b1\u4eec\u5c31\u8fd4\u56de&#034;None&#034;<br \/>\n        else return iter-&gt;second;<br \/>\n    }<br \/>\n    ~Dict()<br \/>\n    {<br \/>\n    }<\/p>\n<p>private:<br \/>\n    std::unordered_map&lt;std::string, std::string&gt; _dict; \/\/ \u5bf9\u4e8e\u8fd9\u4e2a\u5b57\u5178, \u6211\u4eec\u52a0\u8f7d\u8fdb\u6765\u662f\u7528\u54c8\u5e0c\u8868\u8fdb\u884c\u6620\u5c04\u7ec4\u7ec7\u7684!<br \/>\n    std::string _dict_path; \/\/ \u5916\u754c\u7ed9\u4f60\u6587\u4ef6\u8def\u5f84, \u6765\u8bfb\u53d6\u5bf9\u5e94\u7684\u5355\u8bcd\u6570\u636e.<br \/>\n};<br \/>\napple: \u82f9\u679c<br \/>\nbanana: \u9999\u8549<br \/>\ncat: \u732b<br \/>\ndog: \u72d7<br \/>\nbook: \u4e66<br \/>\npen: \u7b14<br \/>\nhappy: \u5feb\u4e50\u7684<br \/>\nsad: \u60b2\u4f24\u7684<br \/>\nrun: \u8dd1<br \/>\njump: \u8df3<br \/>\nteacher: \u8001\u5e08<br \/>\nstudent: \u5b66\u751f<br \/>\ncar: \u6c7d\u8f66<br \/>\nbus: \u516c\u4ea4\u8f66<br \/>\nlove: \u7231<br \/>\nhate: \u6068<br \/>\nhello: \u4f60\u597d<br \/>\ngoodbye: \u518d\u89c1<br \/>\nsummer: \u590f\u5929<br \/>\nwinter: \u51ac\u5929 <\/p>\n<h4 id=\"q5vmY\">4.2. \u5176\u4ed6\u4ee3\u7801<\/h4>\n<p>#pragma once<\/p>\n<p>#include &lt;iostream&gt;<br \/>\n#include &lt;string&gt;<br \/>\n#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/socket.h&gt;<br \/>\n#include &lt;arpa\/inet.h&gt;<br \/>\n#include &lt;netinet\/in.h&gt;<\/p>\n<p>class InetAddr<br \/>\n{<br \/>\nprivate:<br \/>\n    void ToHost(const struct sockaddr_in &amp;addr)<br \/>\n    {<br \/>\n        _port &#061; ntohs(addr.sin_port);<br \/>\n        _ip &#061; inet_ntoa(addr.sin_addr);<br \/>\n    }<\/p>\n<p>public:<br \/>\n    InetAddr(const struct sockaddr_in &amp;addr):_addr(addr)<br \/>\n    {<br \/>\n        ToHost(addr);<br \/>\n    }<br \/>\n    std::string Ip()<br \/>\n    {<br \/>\n        return _ip;<br \/>\n    }<br \/>\n    uint16_t Port()<br \/>\n    {<br \/>\n        return _port;<br \/>\n    }<br \/>\n    ~InetAddr()<br \/>\n    {<br \/>\n    }<\/p>\n<p>private:<br \/>\n    std::string _ip;<br \/>\n    uint16_t _port;<br \/>\n    struct sockaddr_in _addr;<br \/>\n};<br \/>\n#pragma once<\/p>\n<p>#include &lt;pthread.h&gt;<\/p>\n<p>class LockGuard<br \/>\n{<br \/>\npublic:<br \/>\n    LockGuard(pthread_mutex_t *mutex):_mutex(mutex)<br \/>\n    {<br \/>\n        pthread_mutex_lock(_mutex);<br \/>\n    }<br \/>\n    ~LockGuard()<br \/>\n    {<br \/>\n        pthread_mutex_unlock(_mutex);<br \/>\n    }<br \/>\nprivate:<br \/>\n    pthread_mutex_t *_mutex;<br \/>\n};<br \/>\n#pragma once<\/p>\n<p>#include &lt;iostream&gt;<br \/>\n#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;unistd.h&gt;<br \/>\n#include &lt;ctime&gt;<br \/>\n#include &lt;cstdarg&gt;<br \/>\n#include &lt;fstream&gt;<br \/>\n#include &lt;cstring&gt;<br \/>\n#include &lt;pthread.h&gt;<br \/>\n#include &#034;LockGuard.hpp&#034;<\/p>\n<p>namespace log_ns<br \/>\n{<\/p>\n<p>    enum<br \/>\n    {<br \/>\n        DEBUG &#061; 1,<br \/>\n        INFO,<br \/>\n        WARNING,<br \/>\n        ERROR,<br \/>\n        FATAL<br \/>\n    };<\/p>\n<p>    std::string LevelToString(int level)<br \/>\n    {<br \/>\n        switch (level)<br \/>\n        {<br \/>\n        case DEBUG:<br \/>\n            return &#034;DEBUG&#034;;<br \/>\n        case INFO:<br \/>\n            return &#034;INFO&#034;;<br \/>\n        case WARNING:<br \/>\n            return &#034;WARNING&#034;;<br \/>\n        case ERROR:<br \/>\n            return &#034;ERROR&#034;;<br \/>\n        case FATAL:<br \/>\n            return &#034;FATAL&#034;;<br \/>\n        default:<br \/>\n            return &#034;UNKNOWN&#034;;<br \/>\n        }<br \/>\n    }<\/p>\n<p>    std::string GetCurrTime()<br \/>\n    {<br \/>\n        time_t now &#061; time(nullptr);<br \/>\n        struct tm *curr_time &#061; localtime(&amp;now);<br \/>\n        char buffer[128];<br \/>\n        snprintf(buffer, sizeof(buffer), &#034;%d-%02d-%02d %02d:%02d:%02d&#034;,<br \/>\n                 curr_time-&gt;tm_year &#043; 1900,<br \/>\n                 curr_time-&gt;tm_mon &#043; 1,<br \/>\n                 curr_time-&gt;tm_mday,<br \/>\n                 curr_time-&gt;tm_hour,<br \/>\n                 curr_time-&gt;tm_min,<br \/>\n                 curr_time-&gt;tm_sec);<br \/>\n        return buffer;<br \/>\n    }<\/p>\n<p>    class logmessage<br \/>\n    {<br \/>\n    public:<br \/>\n        std::string _level;<br \/>\n        pid_t _id;<br \/>\n        std::string _filename;<br \/>\n        int _filenumber;<br \/>\n        std::string _curr_time;<br \/>\n        std::string _message_info;<br \/>\n    };<\/p>\n<p>#define SCREEN_TYPE 1<br \/>\n#define FILE_TYPE 2<\/p>\n<p>    const std::string glogfile &#061; &#034;.\/log.txt&#034;;<br \/>\n    pthread_mutex_t glock &#061; PTHREAD_MUTEX_INITIALIZER;<\/p>\n<p>    \/\/ log.logMessage(&#034;&#034;, 12, INFO, &#034;this is a %d message ,%f, %s hellwrodl&#034;, x, , , );<br \/>\n    class Log<br \/>\n    {<br \/>\n    public:<br \/>\n        Log(const std::string &amp;logfile &#061; glogfile) : _logfile(logfile), _type(SCREEN_TYPE)<br \/>\n        {<br \/>\n        }<br \/>\n        void Enable(int type)<br \/>\n        {<br \/>\n            _type &#061; type;<br \/>\n        }<br \/>\n        void FlushLogToScreen(const logmessage &amp;lg)<br \/>\n        {<br \/>\n            printf(&#034;[%s][%d][%s][%d][%s] %s&#034;,<br \/>\n                   lg._level.c_str(),<br \/>\n                   lg._id,<br \/>\n                   lg._filename.c_str(),<br \/>\n                   lg._filenumber,<br \/>\n                   lg._curr_time.c_str(),<br \/>\n                   lg._message_info.c_str());<br \/>\n        }<br \/>\n        void FlushLogToFile(const logmessage &amp;lg)<br \/>\n        {<br \/>\n            std::ofstream out(_logfile, std::ios::app);<br \/>\n            if (!out.is_open())<br \/>\n                return;<br \/>\n            char logtxt[2048];<br \/>\n            snprintf(logtxt, sizeof(logtxt), &#034;[%s][%d][%s][%d][%s] %s&#034;,<br \/>\n                     lg._level.c_str(),<br \/>\n                     lg._id,<br \/>\n                     lg._filename.c_str(),<br \/>\n                     lg._filenumber,<br \/>\n                     lg._curr_time.c_str(),<br \/>\n                     lg._message_info.c_str());<br \/>\n            out.write(logtxt, strlen(logtxt));<br \/>\n            out.close();<br \/>\n        }<br \/>\n        void FlushLog(const logmessage &amp;lg)<br \/>\n        {<br \/>\n            \/\/ \u52a0\u8fc7\u6ee4\u903b\u8f91 &#8212; TODO<\/p>\n<p>            LockGuard lockguard(&amp;glock);<br \/>\n            switch (_type)<br \/>\n            {<br \/>\n            case SCREEN_TYPE:<br \/>\n                FlushLogToScreen(lg);<br \/>\n                break;<br \/>\n            case FILE_TYPE:<br \/>\n                FlushLogToFile(lg);<br \/>\n                break;<br \/>\n            }<br \/>\n        }<br \/>\n        void logMessage(std::string filename, int filenumber, int level, const char *format, &#8230;)<br \/>\n        {<br \/>\n            logmessage lg;<\/p>\n<p>            lg._level &#061; LevelToString(level);<br \/>\n            lg._id &#061; getpid();<br \/>\n            lg._filename &#061; filename;<br \/>\n            lg._filenumber &#061; filenumber;<br \/>\n            lg._curr_time &#061; GetCurrTime();<\/p>\n<p>            va_list ap;<br \/>\n            va_start(ap, format);<br \/>\n            char log_info[1024];<br \/>\n            vsnprintf(log_info, sizeof(log_info), format, ap);<br \/>\n            va_end(ap);<br \/>\n            lg._message_info &#061; log_info;<\/p>\n<p>            \/\/ \u6253\u5370\u51fa\u6765\u65e5\u5fd7<br \/>\n            FlushLog(lg);<br \/>\n        }<br \/>\n        ~Log()<br \/>\n        {<br \/>\n        }<\/p>\n<p>    private:<br \/>\n        int _type;<br \/>\n        std::string _logfile;<br \/>\n    };<\/p>\n<p>    Log lg;<\/p>\n<p>#define LOG(Level, Format, &#8230;)                                        \\\\<br \/>\n    do                                                                 \\\\<br \/>\n    {                                                                  \\\\<br \/>\n        lg.logMessage(__FILE__, __LINE__, Level, Format, ##__VA_ARGS__); \\\\<br \/>\n    } while (0)<br \/>\n#define EnableScreen()          \\\\<br \/>\n    do                          \\\\<br \/>\n    {                           \\\\<br \/>\n        lg.Enable(SCREEN_TYPE); \\\\<br \/>\n    } while (0)<br \/>\n#define EnableFILE()          \\\\<br \/>\n    do                        \\\\<br \/>\n    {                         \\\\<br \/>\n        lg.Enable(FILE_TYPE); \\\\<br \/>\n    } while (0)<br \/>\n};<br \/>\n.PHONY:all<br \/>\nall:udpserver udpclient<\/p>\n<p>udpserver:UdpServerMain.cc<br \/>\ng&#043;&#043; -o $&#064; $^ -std&#061;c&#043;&#043;14<br \/>\nudpclient:UdpClientMain.cc<br \/>\ng&#043;&#043; -o $&#064; $^ -std&#061;c&#043;&#043;14<\/p>\n<p>.PHONY:clean<br \/>\nclean:<br \/>\nrm -rf udpserver udpclient<br \/>\n#include &lt;iostream&gt;<br \/>\n#include &lt;string&gt;<br \/>\n#include &lt;cstring&gt;<br \/>\n#include &lt;unistd.h&gt;<br \/>\n#include &lt;sys\/types.h&gt;<br \/>\n#include &lt;sys\/socket.h&gt;<br \/>\n#include &lt;netinet\/in.h&gt;<br \/>\n#include &lt;arpa\/inet.h&gt;<\/p>\n<p>\/\/ \u5ba2\u6237\u7aef\u5728\u672a\u6765\u4e00\u5b9a\u8981\u77e5\u9053\u670d\u52a1\u5668\u7684IP\u5730\u5740\u548c\u7aef\u53e3\u53f7<br \/>\n\/\/ .\/udp_client server-ip server-port<br \/>\n\/\/ .\/udp_client 127.0.0.1 8888<br \/>\nint main(int argc, char *argv[])<br \/>\n{<br \/>\n    if(argc !&#061; 3)<br \/>\n    {<br \/>\n        std::cerr &lt;&lt; &#034;Usage: &#034; &lt;&lt; argv[0] &lt;&lt; &#034; server-ip server-port&#034; &lt;&lt; std::endl;<br \/>\n        exit(0);<br \/>\n    }<\/p>\n<p>    std::string serverip &#061; argv[1];<br \/>\n    uint16_t serverport &#061; std::stoi(argv[2]);<\/p>\n<p>    int sockfd &#061; ::socket(AF_INET, SOCK_DGRAM, 0);<br \/>\n    if(sockfd &lt; 0)<br \/>\n    {<br \/>\n        std::cerr &lt;&lt; &#034;create socket error&#034; &lt;&lt; std::endl;<br \/>\n        exit(1);<br \/>\n    }<\/p>\n<p>    \/\/ client\u7684\u7aef\u53e3\u53f7&#xff0c;\u4e00\u822c\u4e0d\u8ba9\u7528\u6237\u81ea\u5df1\u8bbe\u5b9a&#xff0c;\u800c\u662f\u8ba9client OS\u968f\u673a\u9009\u62e9&#xff1f;\u600e\u4e48\u9009\u62e9&#xff0c;\u4ec0\u4e48\u65f6\u5019\u9009\u62e9\u5462&#xff1f;<br \/>\n    \/\/ client \u9700\u8981 bind\u5b83\u81ea\u5df1\u7684IP\u548c\u7aef\u53e3&#xff0c; \u4f46\u662fclient \u4e0d\u9700\u8981 \u201c\u663e\u793a\u201d bind\u5b83\u81ea\u5df1\u7684IP\u548c\u7aef\u53e3&#xff0c;<br \/>\n    \/\/ client \u5728\u9996\u6b21\u5411\u670d\u52a1\u5668\u53d1\u9001\u6570\u636e\u7684\u65f6\u5019&#xff0c;OS\u4f1a\u81ea\u52a8\u7ed9client bind\u5b83\u81ea\u5df1\u7684IP\u548c\u7aef\u53e3<\/p>\n<p>    struct sockaddr_in server;<br \/>\n    memset(&amp;server, 0, sizeof(server));<br \/>\n    server.sin_family &#061; AF_INET;<br \/>\n    server.sin_port &#061; htons(serverport);<br \/>\n    server.sin_addr.s_addr &#061; inet_addr(serverip.c_str());<br \/>\n    while(1)<br \/>\n    {<br \/>\n        std::string line;<br \/>\n        std::cout &lt;&lt; &#034;Please Enter# &#034;;<br \/>\n        std::getline(std::cin, line);<\/p>\n<p>        \/\/ std::cout &lt;&lt; &#034;line message is&#064; &#034; &lt;&lt; line &lt;&lt; std::endl;<\/p>\n<p>        int n &#061; sendto(sockfd, line.c_str(), line.size(), 0, (struct sockaddr*)&amp;server, sizeof(server)); \/\/ \u4f60\u8981\u53d1\u9001\u6d88\u606f&#xff0c;\u4f60\u5f97\u77e5\u9053\u4f60\u8981\u53d1\u7ed9\u8c01\u554a&#xff01;<br \/>\n        if(n &gt; 0)<br \/>\n        {<br \/>\n            struct sockaddr_in temp;<br \/>\n            socklen_t len &#061; sizeof(temp);<br \/>\n            char buffer[1024];<br \/>\n            int m &#061; recvfrom(sockfd, buffer, sizeof(buffer)-1, 0, (struct sockaddr*)&amp;temp, &amp;len);<br \/>\n            if(m &gt; 0)<br \/>\n            {<br \/>\n                buffer[m] &#061; 0;<br \/>\n                std::cout &lt;&lt; buffer &lt;&lt; std::endl;<br \/>\n            }<br \/>\n            else<br \/>\n            {<br \/>\n                std::cout &lt;&lt; &#034;recvfrom error&#034; &lt;&lt; std::endl;<br \/>\n                break;<br \/>\n            }<br \/>\n        }<br \/>\n        else<br \/>\n        {<br \/>\n            std::cout &lt;&lt; &#034;sendto error&#034; &lt;&lt; std::endl;<br \/>\n            break;<br \/>\n        }<br \/>\n    }<\/p>\n<p>    ::close(sockfd);<br \/>\n    return 0;<br \/>\n}<br \/>\n#pragma once<\/p>\n<p>class nocopy<br \/>\n{<br \/>\npublic:<br \/>\n    nocopy(){}<br \/>\n    ~nocopy(){}<br \/>\n    nocopy(const nocopy&amp;) &#061; delete;<br \/>\n    const nocopy&amp; operator&#061;(const nocopy&amp;) &#061; delete;<br \/>\n};<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb761\u6b21\uff0c\u70b9\u8d5e17\u6b21\uff0c\u6536\u85cf21\u6b21\u3002[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb)<\/p>\n","protected":false},"author":2,"featured_media":23199,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[193,270,43],"topic":[],"class_list":["post-23219","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-udp","tag-270","tag-43"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb) - \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\/23219.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb) - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb761\u6b21\uff0c\u70b9\u8d5e17\u6b21\uff0c\u6536\u85cf21\u6b21\u3002[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb)\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/23219.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-18T23:17:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231752-6802dda02004b.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=\"8 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/23219.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/23219.html\",\"name\":\"[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb) - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2025-04-18T23:17:55+00:00\",\"dateModified\":\"2025-04-18T23:17:55+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/23219.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/23219.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/23219.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb)\"}]},{\"@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":"[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb) - \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\/23219.html","og_locale":"zh_CN","og_type":"article","og_title":"[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb) - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb761\u6b21\uff0c\u70b9\u8d5e17\u6b21\uff0c\u6536\u85cf21\u6b21\u3002[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb)","og_url":"https:\/\/www.wsisp.com\/helps\/23219.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2025-04-18T23:17:55+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418231752-6802dda02004b.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"8 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/23219.html","url":"https:\/\/www.wsisp.com\/helps\/23219.html","name":"[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb) - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2025-04-18T23:17:55+00:00","dateModified":"2025-04-18T23:17:55+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/23219.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/23219.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/23219.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"[net 5] udp_dict_server \u57fa\u4e8eudp\u7684\u7b80\u5355\u5b57\u5178\u7ffb\u8bd1(\u670d\u52a1\u5668\u4e0e\u4e1a\u52a1\u76f8\u5206\u79bb)"}]},{"@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\/23219","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=23219"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/23219\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/23199"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=23219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=23219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=23219"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=23219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}