{"id":5057,"date":"2024-01-13T19:29:49","date_gmt":"2024-01-13T11:29:49","guid":{"rendered":"https:\/\/www.kenpai.com\/cms\/5057\/"},"modified":"2024-01-13T19:29:49","modified_gmt":"2024-01-13T11:29:49","slug":"%e5%a4%9a%e8%bf%9b%e7%a8%8b%e5%a4%9a%e7%ba%bf%e7%a8%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%ef%bc%88tcp_server%ef%bc%89%e7%bc%96%e5%86%99","status":"publish","type":"post","link":"https:\/\/www.kenpai.com\/cms\/5057\/","title":{"rendered":"\u591a\u8fdb\u7a0b\u591a\u7ebf\u7a0b\u670d\u52a1\u5668\uff08tcp_server\uff09\u7f16\u5199"},"content":{"rendered":"<\/p>\n<p><strong>\u7f16\u5199\u5ba2\u6237\/\u670d\u52a1\u5668<\/strong><\/p>\n<p>1.\u7f16\u5199\u5355\u8fdb\u7a0b\u5ba2\u6237\/\u670d\u52a1\u5668\uff08Version1\uff09<\/p>\n<p>\u4ee3\u7801\u6e05\u5355\uff1a <br \/><strong>tcp_servet<\/strong><\/p>\n<p>#include&lt;stdio.h&gt;<br \/>#include&lt;sys\/types.h&gt;<br \/>#include&lt;sys\/socket.h&gt;<br \/>#include&lt;stdlib.h&gt;<br \/>#include&lt;netinet\/in.h&gt;<br \/>#include&lt;arpa\/inet.h&gt;<br \/>#include&lt;string.h&gt;<\/p>\n<p>static void usage(const char* proc)<br \/>{<br \/>    printf(\\&#8221;Usage: %s [local_ip] [local_port]\\&#8221;,proc);\/\/\u63d0\u793a\u8f93\u5165\u51fa\u9519\uff0c\u5e94\u8be5\u8f93\u5165.\/tcp_servet ip\u5730\u5740 \u7aef\u53e3\u53f7\uff08\u8fd0\u884c\u670d\u52a1\u5668\uff09<br \/>}<\/p>\n<p>int startup(const char* ip,int port)\/\/\u521b\u5efa\u5957\u63a5\u5b57<br \/>{<br \/>    int sock = socket(AF_INET,SOCK_STREAM,0);\/\/socket\uff08\uff09\u521b\u5efa\u5957\u63a5\u5b57\u51fd\u6570<br \/>    if(sock&lt;0)<br \/>    {<br \/>        perror(\\&#8221;socket\\&#8221;);\/\/\u63d0\u793a\u521b\u5efa\u5957\u63a5\u5b57\u5931\u8d25<br \/>        exit(2);<br \/>    }<\/p>\n<p>\/\/socket\u7684\u8fd4\u56de\u503c\u53ea\u662f\u4e00\u4e2a\u6587\u4ef6\u63cf\u8ff0\u7b26\uff0c\u4e3a\u4e86\u8fdb\u884c\u7f51\u7edc\u901a\u4fe1\uff0c\u6211\u4eec\u8fd8\u9700\u5c06\u5176\u4e0e\u670d\u52a1\u5668 ip\u5730\u5740\u548c\u7aef\u53e3\u53f7\u8fdb\u884c\u7ed1\u5b9a<\/p>\n<p>    struct sockaddr_in local;\/\/\u7ed3\u6784\u4f53struct sockaddr_in\u662fstruct sockaddr\u7684\u5177\u4f53\u5316<br \/>    local.sin_family = AF_INET;<br \/>    local.sin_port = htons(port);<br \/>    local.sin_addr.s_addr = inet_addr(ip);<\/p>\n<p>    if(bind(sock,(struct sockaddr*) &amp;local,sizeof(local))&lt;0){\/\/bind(\u7ed1\u5b9a\u51fd\u6570<br \/>        perror(\\&#8221;bind\\&#8221;);<br \/>        exit(3);<br \/>            }<br \/>\/\/\u76d1\u542c<br \/>    if(listen(sock,10)&lt;0)\/\/\u670d\u52a1\u566824\u5c0f\u65f6\u76d1\u542c\uff0c\u7b49\u5f85\u8fde\u63a5\u8bf7\u6c42<br \/>    {<br \/>        perror(\\&#8221;listen\\&#8221;);<br \/>        exit(4);<br \/>    }<br \/>    return sock;<br \/>}<\/p>\n<p>\/\/Version 1<br \/>\/\/.\/tcp_servet 127.0.0.1 8080  \u672c\u5730\u73af\u56de<br \/>int main(int argc,char* argv[])<br \/>{<br \/>    if(argc!=3){<br \/>        usage(argv[0]);<br \/>        return 1;<br \/>    }<\/p>\n<p>    int listen_sock = startup(argv[1],atoi(argv[2]));\/\/create socket<\/p>\n<p>    int new_sock;<br \/>    while(1){<br \/>        struct sockaddr_in client;<br \/>        socklen_t len = sizeof(client);<\/p>\n<p>        new_sock = accept(listen_sock,(struct sockaddr*)&amp;client ,&amp;len);\/\/accept\u521b\u5efa\u65b0\u7684socket,\u7528\u6765\u5904\u7406\u5ba2\u6237\u6bb5\u8bf7\u6c42\uff0clisten_sock\u53ea\u8d1f\u8d23\u76d1\u542c<br \/>        if(new_sock&lt;0)<br \/>        {<br \/>            perror(\\&#8221;accept\\&#8221;);<br \/>            exit(5);<br \/>            continue;<br \/>        }<br \/>        \/\/\u6210\u529f\u83b7\u53d6\u5230\u5ba2\u6237\u7aef\uff0c\u6253\u5370\u5ba2\u6237\u7aef\u7684 ip\u548c\u7aef\u53e3\u53f7\uff0caccept\u7684\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f\u8f93\u51fa\u578b\u53c2\u6570\uff0c\u7531\u5b83\u53ef\u5f97\u5ba2\u6237\u7aef\u7684ip\u548c\u7aef\u53e3\u53f7<br \/>        printf(\\&#8221;get an new client: %s, %d\\\\n\\&#8221;,inet_ntoa(client.sin_addr),ntohs(client.sin_port));<br \/>        break;<br \/>    }<\/p>\n<p>\/\/\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u5668\u7aef\u7684\u6570\u636e\u4f20\u8f93<br \/>    char buf[1024];<br \/>    while(1){<br \/>        int r = read(new_sock,buf,sizeof(buf)-1);\/\/\u4ece\u7f51\u7edc\u4e2d\u8bfb\u53d6\u6570\u636e\uff08\u5ba2\u6237\u7aef\u53d1\u9001\u6570\u636e\uff09\u653e\u5165buf\u4e2d\uff1b<br \/>        if(r&lt;0){\/\/\u8bfb\u53d6\u5931\u8d25<br \/>            perror(\\&#8221;read\\&#8221;);<br \/>            close(new_sock);<br \/>            break;<br \/>        }else if(r==0){\/\/\u5ba2\u6237\u7aef\u5df2\u5173\u95ed<br \/>            close(new_sock);<br \/>            printf(\\&#8221;client qiuit&#8230;\\\\n\\&#8221;);<br \/>            break;<br \/>        }<\/p>\n<p>        \/\/\u8bfb\u53d6\u6210\u529f<br \/>        buf[r] = 0;<br \/>        printf(\\&#8221;clinet: %s\\\\n\\&#8221;,buf);<br \/>        write(new_sock,buf,strlen(buf));\/\/\u56de\u9001\u6570\u636e<br \/>    }<\/p>\n<p>    return 0;<br \/>}<\/pre>\n<p><strong>tcp_client.c<\/strong>\u5ba2\u6237\u7aef<\/p>\n<p>#include&lt;stdio.h&gt;<br \/>#include&lt;stdlib.h&gt;<br \/>#include&lt;sys\/types.h&gt;<br \/>#include&lt;sys\/socket.h&gt;<br \/>#include&lt;arpa\/inet.h&gt;<br \/>#include&lt;netinet\/in.h&gt;<br \/>#include&lt;string.h&gt;<\/p>\n<p>void static Usage(const char* proc)\/\/\u63d0\u793a\u6253\u5370\u683c\u5f0f<br \/>{<br \/>    printf(\\&#8221;Usage: %s [local_ip] [local_port]\\\\n\\&#8221;,proc);\/\/\u8fd0\u884c\u5ba2\u6237\u7aef.\/tcp_servet \u670d\u52a1\u5668ip \u670d\u52a1\u5668\u7aef\u53e3\u53f7<br \/>}<\/p>\n<p>\/\/.\/tcp_clinet  servet_ip  servet_port<br \/>int main(int argc,char* argv[])<br \/>{<br \/>    if(argc!=3){<br \/>        Usage(argv[1]);<br \/>        exit(1);<br \/>    }<\/p>\n<p>    int sock = socket(AF_INET,SOCK_STREAM,0);\/\/\u521b\u5efa\u5957\u63a5\u5b57<br \/>    if(sock &lt; 0 ){<br \/>        perror(\\&#8221;socket\\&#8221;);<br \/>        exit(2);<br \/>    }<br \/>    \/\/\u5ba2\u6237\u7aefsocket\u4e0d\u7ed1\u5b9a<br \/>    struct sockaddr_in server;<br \/>    server.sin_family = AF_INET;<br \/>    server.sin_port = htons(atoi(argv[2]));\/\/htons\u5c06\u672c\u5730\u7aef\u53e3\u53f7\u8f6c\u4e3a\u7f51\u7edc\u7aef\u53e3\u53f7<br \/>    server.sin_addr.s_addr = inet_addr(argv[1]); \/\/\u7ed9\u6570\u636e\u7ed3\u6784\u6210\u5458\u8d4b\u503c<br \/>    \/\/connect()\u94fe\u63a5\u670d\u52a1\u5668<br \/>    if(connect(sock,(struct sockaddr*)&amp;server,sizeof(server))&lt;0){<br \/>        perror(\\&#8221;connect\\&#8221;);<br \/>        exit(3);<br \/>    }<br \/>   \/\/\u5ba2\u6237\u7aef\u53d1\u9001\u6570\u636e<br \/>    char buf[1024];<br \/>    while(1){<br \/>        printf(\\&#8221;Please Enter$\\&#8221;);<br \/>        fflush(stdout);<\/p>\n<p>        ssize_t s = read(0,buf,sizeof(buf)-1);\/\/\u4ece\u6807\u51c6\u8f93\u5165\u8bfb\u6570\u636e\u5230buf<br \/>        if(s&gt;0){\/\/\u8bfb\u53d6\u6210\u529f<br \/>            buf[s-1] = 0;<br \/>            write(sock,buf,strlen(buf));\/\/\u5c06\u6570\u636e\u5199\u5230\u7f51\u7edc\u4e2d<br \/>            s = read(sock,buf,sizeof(buf)-1);\/\/\u8bfb\u53d6\u56de\u663e\u6570\u636e<br \/>            if(s&gt;0){<br \/>                buf[s] = 0;<br \/>                printf(\\&#8221;servetr echo#:%s\\\\n\\&#8221;,buf);<br \/>        }<br \/>    }<br \/>    return 0;<br \/>}<\/pre>\n<p><strong>\u6ce8\u610f\u8981\u70b9<\/strong>\uff1a<\/p>\n<p>\u4e0a\u8ff0\u7684\u670d\u52a1\u5668\u5730\u5740\u91c7\u7528127.0.0.1\uff0c\u6545\u8be5\u670d\u52a1\u5668\u6ca1\u6709\u901a\u8fc7\u7f51\u7edc\u901a\u4fe1\uff0c\u8fd8\u662f\u4e00\u76f4\u76d1\u542c\u6240\u5728\u4e3b\u673a\u4e0a\u7684\u5ba2\u6237\u94fe\u63a5\u8bf7\u6c42\uff0c\u8fd9\u662f\u672c\u5730\u73af\u56de\uff1b<\/p>\n<p>\u8be5\u5ba2\u6237\/\u670d\u52a1\u5668\u662f\u4e00\u4e2a\u5355\u8fdb\u7a0b\u7684\u670d\u52a1\u5668\uff0c\u4e00\u6b21\u53ea\u80fd\u94fe\u63a5\u4e00\u4e2a\u5ba2\u6237\u8bf7\u6c42\uff0c\u56e0\u4e3a\u6211\u4eec\u5728\u6536\u5230\u4e00\u4e2a\u5ba2\u6237\u8bf7\u6c42\u540e\uff0c\u6267\u884c\u5b8c\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u624d\u63a5\u53d7\u4e0b\u4e00\u4e2a\u8bf7\u6c42\u7684\u94fe\u63a5<\/p>\n<p>\u5ba2\u6237\u7aef\u7684\u5957\u63a5\u5b57\u53ef\u4ee5\u7ed1\u5b9a\u4e5f\u53ef\u4ee5\u4e0d\u7ed1\u5b9a\uff0c\u4f46\u4e00\u822c\u4e0d\u8fdb\u884c\u7ed1\u5b9a\uff0c\u56e0\u4e3a\u4e00\u70b9\u7ed1\u5b9a\u670d\u52a1\u5668\u7684ip,\u90a3\u4e48\u82e5\u522b\u7684\u5ba2\u6237\u7aef\u60f3\u94fe\u63a5\uff0c\u94fe\u63a5\u4e0d\u4e0a<\/p>\n<p>\u6d89\u53ca\u51fd\u6570\u4ee5\u53ca\u547d\u4ee4<\/p>\n<p>\u521b\u5efasocket <\/p>\n<p>domain\u8868\u793a\u57df\uff0cipv4\u4e3aAF_INET; <br \/>type\u8868\u793a\u7c7b\u578b\uff0cSOCK_STREAM(\u9762\u5411\u5b57\u8282\u6d41) <br \/>protocal\u8868\u793a\u534f\u8bae\uff0c\u5355\u4e2a\u901a\u4fe1\u534f\u8bae\u60c5\u51b5\u4e0b\u4e3a0<\/p>\n<p>bind\u7ed1\u5b9a <\/p>\n<p>sockfd : socket()\u7684\u8fd4\u56de\u503c\uff0c\u4e00\u4e2a\u6587\u4ef6\u63cf\u8ff0\u7b26 <br \/>addr\uff1a\u4e00\u4e2astruct sockaddr_in \u7684\u7ed3\u6784\u4f53 <\/p>\n<p>struct in_addr\u7ed3\u6784\u4f53\u6210\u5458\u662fs_addr,\u8868\u793aip\u5730\u5740\uff1b <br \/>addrlen\uff1a\u7ed3\u6784\u4f53\u5927\u5c0f<\/p>\n<p>accept\u521b\u5efa\u65b0\u7684socket <\/p>\n<p>addr\u662f\u4e00\u4e2a\u8f93\u51fa\u578b\u53c2\u6570\uff0c\u8f93\u51fa\u7684\u662f\u5ba2\u6237\u7aef\u7684struct sockaddr_in \u7684\u5185\u5bb9 <br \/>addrlen\u662f\u4e00\u4e2a\u8f93\u5165\u8f93\u51fa\u578b\u53c2\u6570<br \/>ip\u8f6c\u6362 <\/p>\n<p>\u672c\u5730\u7aef\u53e3\u53f7\u4e0e\u7f51\u7edc\u7aef\u53e3\u53f7\u7684\u4e92\u6362 <\/p>\n<p>\u76d1\u542c <\/p>\n<p>backlog : \u662f\u64cd\u4f5c\u7cfb\u7edf\u5e95\u5c42\u8fde\u63a5\u961f\u5217\uff0c\u4e0d\u80fd\u8bbe\u7f6e\u8fc7\u5927\uff1b<br \/>connect\u51fd\u6570\uff08\u5ba2\u6237\u7aef\u8fde\u63a5\u670d\u52a1\u5668\uff09 <\/p>\n<p>2.\u591a\u8fdb\u7a0b\u670d\u52a1\u5668\u7f16\u5199<\/p>\n<p>\u4ee3\u7801\u6e05\u5355\uff1a <br \/>tcp_servet.c<\/p>\n<p>#include&lt;stdio.h&gt;<br \/>#include&lt;stdlib.h&gt;<br \/>#include&lt;sys\/types.h&gt;<br \/>#include&lt;sys\/socket.h&gt;<br \/>#include&lt;netinet\/in.h&gt;<br \/>#include&lt;arpa\/inet.h&gt;<br \/>#include&lt;string.h&gt;<\/p>\n<p>\/\/Version2<\/p>\n<p>void static usage(const char* proc)<br \/>{<br \/>    printf(\\&#8221;Usage: %s [local_ip] [local_port]\\\\n\\&#8221;,proc);<br \/>}<\/p>\n<p>int startup(char* _ip,int _port)<br \/>{<br \/>    int sock = socket(AF_INET,SOCK_STREAM,0);<br \/>    if(sock&lt;0){<br \/>        perror(\\&#8221;socket\\&#8221;);<br \/>        exit(2);<br \/>    }<br \/>    struct sockaddr_in local;<br \/>    local.sin_family = AF_INET;<br \/>    local.sin_port = htons(_port);<br \/>    local.sin_addr.s_addr = inet_addr(_ip);<\/p>\n<p>    if(bind(sock,(struct sockaddr*) &amp;local,sizeof(local))&lt;0){<br \/>        perror(\\&#8221;bind\\&#8221;);<br \/>        exit(3);<br \/>    }<\/p>\n<p>    if(listen(sock,10)&lt;0){<br \/>        perror(\\&#8221;listen\\&#8221;);<br \/>        exit(4);<br \/>    }<br \/>    return sock;<br \/>}<\/p>\n<p>\/\/.\/tcp_servet local_ip local_port<br \/>int main(int argc,char* argv[]){<br \/>    if(argc!=3){<br \/>        usage(argv[0]);<br \/>        return 1;<br \/>    }<\/p>\n<p>    int listen_sock = startup(argv[1],atoi(argv[2]));<\/p>\n<p>    int new_sock;<br \/>    while(1){<br \/>        struct sockaddr_in client;<br \/>        socklen_t len = sizeof(client);<br \/>        new_sock = accept(listen_sock,(struct sockaddr*) &amp;client,&amp;len);<br \/>        if(new_sock &lt; 0){<br \/>            perror(\\&#8221;accept\\&#8221;);<br \/>            exit(5);<br \/>            continue;<br \/>        }<br \/>        printf(\\&#8221;get an new client:%s,%d\\\\n\\&#8221;,inet_ntoa(client.sin_addr),ntohs(client.sin_port));<br \/>        break;<br \/>    }<\/p>\n<p>    \/\/\u521b\u5efa\u4e86\u4e00\u4e2a\u5b50\u8fdb\u7a0b\u4ee3\u66ff\u6211\u4eec\u5904\u7406\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42&#8212;\u4e0e\u4e0a\u8ff0\u5355\u8fdb\u7a0b\u7684\u4e0d\u540c\u4e4b\u5904<br \/>    pid_t id = fork();<br \/>    if(id&lt;0){<br \/>        perror(\\&#8221;fork\\&#8221;);<br \/>        exit(6);<br \/>    }else if(id==0){\/\/child<br \/>        close(listen_sock);\/\/\u5173\u95ed\u4e0d\u5fc5\u8981\u7684\u6587\u4ef6<br \/>        if(fork &gt; 0){\/\/\u4e24\u6b21fork<br \/>            exit(7);<br \/>        }<\/p>\n<p>        char buf[1024];<br \/>        while(1){<br \/>            int r= read(new_sock);<br \/>            if(r&lt;0){<br \/>                perror(\\&#8221;read\\&#8221;);<br \/>                close(new_sock);<br \/>                break;<br \/>            }else if(r==0){<br \/>                close(new_sock);<br \/>                printf(\\&#8221;clinet quit&#8230;\\\\n\\&#8221;);<br \/>                break;<br \/>            }<br \/>            buf[r] = 0;<br \/>            printf(\\&#8221;clien: %S\\\\n\\&#8221;,buf);<br \/>            write(new_sock,buf,strlen(buf));<br \/>            close(new_sock);<br \/>        }<\/p>\n<p>    }else{\/\/father<br \/>        close(new_sock);\/\/\u7236\u8fdb\u7a0b\u7ee7\u7eed\u8d1f\u8d23\u76d1\u542c\u5ba2\u6237\u8bf7\u6c42\uff0c\u5fc5\u987b\u5173\u95ednew_sock\u6587\u4ef6<br \/>    }<br \/>}<\/pre>\n<p><strong>\u6ce8\u610f\u8981\u70b9<\/strong>\uff1a<\/p>\n<p>\u4e0e\u5355\u8fdb\u7a0b\u7684\u552f\u4e00\u4e0d\u540c\u7684\u662f\uff0c fork\u4e86\u4e00\u4e2a\u5b50\u8fdb\u7a0b\uff0c\u6bcf\u6b21\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u4ea4\u7ed9\u5b50\u8fdb\u7a0b\u5b8c\u6210\uff0c\u7236\u8fdb\u7a0b\u53ea\u8d1f\u8d23\u76d1\u542c \uff1b<br \/><strong>\u4e24\u6b21 fork<\/strong>,\u4e3a\u4e86\u80fd\u591f\u8ba9\u7236\u8fdb\u7a0b\u53ea\u8d1f\u8d23\u76d1\u542c\uff0c\u800c\u4e0d\u963b\u585e\u5f0f\u7684\u7b49\u5f85\u5b50\u8fdb\u7a0b\u7684\u9000\u51fa\uff0c\u6211\u4eec\u91c7\u7528\u4e24\u6b21fork\uff0c\u6b64\u65f6\u5b58\u5728\u4e24\u4e2a\u8fdb\u7a0b\uff0c\u4e24\u4e2a\u8fdb\u7a0b\u5b58\u5728\u7237\u5b59\u5173\u7cfb\uff0c\u201c\u5b59\u5b50\u201d\u8fdb\u7a0b\u6b64\u65f6\u7531\u4e8e\u7236\u8fdb\u7a0b\u5df2\u7ecf\u9000\u51fa\uff0c\u6240\u4ee5\u5b83\u662f\u5b64\u513f\u8fdb\u7a0b\uff0c\u7531 init\u8fdb\u7a0b\u56de\u6536\uff0c\u4e0e\u6b64\u523b\u7684\u7236\u8fdb\u7a0b\u6ca1\u6709\u5173\u7cfb<\/p>\n<p>pid_t id = fork();<br \/>if(id&lt;0){<br \/>    perror(\\&#8221;fork\\&#8221;);<br \/>    exit(6);<br \/>}else if(id==0){\/\/child<br \/>    close(listen_sock);\/\/\u5173\u95ed\u4e0d\u5fc5\u8981\u7684\u6587\u4ef6<br \/>    if(fork &gt; 0){\/\/\u4e24\u6b21fork\uff0c\u7b2c\u4e8c\u6b21\u521b\u5efa\u5b8c\u5b50\u8fdb\u7a0b\u540e\u8be5\u7236\u8fdb\u7a0b\u9000\u51fa<br \/>        exit(7);<br \/>    }<\/pre>\n<p>\u7236\u8fdb\u7a0b\u5fc5\u987b\u5173\u95ednew_sock\u6587\u4ef6\uff0c\u56e0\u4e3a\u5b50\u8fdb\u7a0b\u62f7\u8d1d\u4e86\u7236\u8fdb\u7a0b\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u8868\uff0c\u4e24\u8005\u8868\u662f\u4e00\u6837\u7684\uff0c\u82e5\u4e0d\u5173\u95ed\uff0c\u6bcf\u6b21\u5ba2\u6237\u7aef\u53d1\u9001\u6765\u4e00\u4e2a\u65b0\u7684\u8fde\u63a5\uff0c\u5c31\u8981\u5728\u7236\u8fdb\u7a0b\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u8868\u4e2d\u6253\u5f00\u4e00\u4e2a\u6587\u4ef6\uff0c\u8fd9\u6837\u6d6a\u8d39\u8d44\u6e90\uff0c\u800c\u4e14\u5f88\u5feb\u4f1a\u7528\u5b8c\uff1b\uff08\u5b50\u8fdb\u7a0b\u5904\u7406\u5b8c\u4fe1\u606f\u540e\u9000\u51fa\u65f6\u5173\u95ed\u4e86\u6587\u4ef6\u63cf\u8ff0\u7b26\u8868\uff0c\u800c\u7236\u8fdb\u7a0b\u4e00\u76f4\u5904\u4e8e\u8fd0\u884c\u72b6\u6001\uff0c\u6240\u4ee5\u5fc5\u987b\u4e3b\u52a8\u5173\u95ed\uff09<\/p>\n<p>3.\u591a\u7ebf\u7a0b\u670d\u52a1\u5668\u7684\u7f16\u5199<\/p>\n<p>\u4ee3\u7801\uff1a <\/p>\n<\/p>\n<p>                \u66f4\u591a\u5173\u4e8e\u4e91\u670d\u52a1\u5668\uff0c<span class='wp_keywordlink'><a href=\"https:\/\/www.kenpai.com\/domain.html\" title=\"\u57df\u540d\u6ce8\u518c\" target=\"_blank\">\u57df\u540d<\/a><\/span>\u6ce8\u518c\uff0c\u865a\u62df\u4e3b\u673a\u7684\u95ee\u9898\uff0c\u8bf7\u8bbf\u95ee<span class='wp_keywordlink'><a href=\"https:\/\/www.kenpai.com\/\" title=\"\u57a6\u6d3e\u79d1\u6280\u5b98\u7f51\" target=\"_blank\">\u57a6\u6d3e\u79d1\u6280<\/a><\/span>\u5b98\u7f51\uff1a<span class='wp_keywordlink'><a href=\"https:\/\/www.kenpai.com\/\" title=\"\u57a6\u6d3e\u79d1\u6280\u5b98\u7f51\" target=\"_blank\">www.kenpai.com<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7f16\u5199\u5ba2\u6237\/\u670d\u52a1\u56681.\u7f16\u5199\u5355\u8fdb\u7a0b\u5ba2\u6237\/\u670d\u52a1\u5668\uff08Ve<\/p>\n","protected":false},"author":2,"featured_media":4349,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3322],"tags":[3925],"class_list":["post-5057","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ktougao","tag-tcp_server"],"_links":{"self":[{"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/posts\/5057","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/comments?post=5057"}],"version-history":[{"count":0,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/posts\/5057\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/media\/4349"}],"wp:attachment":[{"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/media?parent=5057"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/categories?post=5057"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/tags?post=5057"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}