{"id":183,"date":"2021-11-21T12:58:15","date_gmt":"2021-11-21T12:58:15","guid":{"rendered":"http:\/\/47.103.123.166\/?p=183"},"modified":"2021-11-21T12:58:15","modified_gmt":"2021-11-21T12:58:15","slug":"c_7-%e7%bd%91%e7%bb%9c%e9%80%9a%e4%bf%a1%ef%bc%88linux%ef%bc%89","status":"publish","type":"post","link":"http:\/\/47.103.123.166\/?p=183","title":{"rendered":"C++_7\u2014\u2014\u7f51\u7edc\u901a\u4fe1\uff08Linux\uff09"},"content":{"rendered":"<p><font face=\"\u6977\u4f53\">&emsp;&emsp;\u8fd9\u4e00\u7cfb\u5217\u6587\u7ae0\u7684\u76ee\u7684\u662f\u5728\u5b66\u4e60\u4e86C++\u57fa\u7840\u540e\uff0c\u7ee7\u7eed\u8865\u5145\u4e00\u4e9bC++\u57fa\u7840\u548c\u8fdb\u9636\u7684\u77e5\u8bc6\u70b9\uff0c\u5305\u62ecC++11\u7684\u76f8\u5173\u5185\u5bb9\u3002<\/p>\n<h2>1 TCP<\/h2>\n<h3>client<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u5934\u6587\u4ef6\n#include &lt;sys\/socket.h&gt;\n#include &lt;arpa\/inet.h&gt;\n#include &lt;netinet\/in.h&gt;\n\n\/\/ TCP\u914d\u7f6e\n    \/\/1\u3001\u521b\u5efasocket\u5957\u63a5\u5b57\n        \/\/ AF_INET\uff08\u5730\u5740\u57df\uff1aIPV4\uff09\uff0cAF_INET6\uff08\u5730\u5740\u57df\uff1aIPV6\uff09\n        \/\/ SOCK_STREAM\uff08\u5957\u63a5\u5b57\u7c7b\u578b \u6d41\u5f0f TCP \u5957\u63a5\u5b57\uff09\uff0cSOCK_DGRAM\uff1a\uff08\u5957\u63a5\u5b57\u7c7b\u578b \u6570\u636e\u62a5 UDP \u5957\u63a5\u5b57\uff09\n        \/\/ 0\uff08\u534f\u8bae\u7c7b\u578b \u9ed8\u8ba4\uff09\uff0c\u8fd4\u56de-1\u8868\u793a\u521b\u5efa\u5931\u8d25\n    int sockfd=socket(AF_INET,SOCK_STREAM,0);\n    if(sockfd&lt;0)\n        return -1;\n\n    \/\/2\u3001\u914d\u7f6eIP\u548c\u7aef\u53e3\n    struct sockaddr_in srv;                         \/\/\u7edf\u4e00\u63a5\u53e3sockaddr_in \u5bf9\u5e94 IPV4\n    srv.sin_family=AF_INET;\n    srv.sin_port=htons(atoi(\"1122\"));               \/\/server\u7684\u7aef\u53e3\n    srv.sin_addr.s_addr=inet_addr(\"192.168.1.100\"); \/\/server\u7684IP\n\n    \/\/3\u3001\u8fde\u63a5\n    socklen_t len=sizeof(struct sockaddr_in);\n    if(connect(sockfd,(struct sockaddr*)&amp;srv,len)&lt;0)\n        return -1;\n\n\/\/ TCP\u6536\u53d1\n    \/\/\u63a5\u6536\n    unsigned char buff_recv[1024];                  \/\/\u5b9a\u4e49\u63a5\u6536\u7684\u6570\u636e\u7f13\u5b58\n    memset(buff_recv, 0x00, sizeof(buff_recv));     \/\/\u521d\u59cb\u5316\u4e3a0\n    recv(sockfd, buff_recv, sizeof(buff_recv)-1, 0);\/\/\u963b\u585e\u63a5\u6536 recv(sockfd, \u6570\u636e\u7f13\u5b58\uff0c\u63a5\u6536\u6570\u636e\u957f\u5ea6\uff0c\u9ed8\u8ba40)\n    \/\/\u53d1\u9001\n    unsigned char buff_send[2]={0x01,0x02}\uff1b     \/\/\u5b9a\u4e49\u4e00\u4e2a\u5f85\u53d1\u9001\u7684\u6570\u636e\n    send(sockfd, buff_send, sizeof(buff_send), 0);  \/\/\u53d1\u51fa send(sockfd\uff0c\u6570\u636e\uff0c\u6570\u636e\u957f\u5ea6\uff0c\u9ed8\u8ba40)\n\n\/\/\u5173\u95edsocket\n    close(sockfd);<\/code><\/pre>\n<h3>server<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u5934\u6587\u4ef6\n#include &lt;sys\/socket.h&gt;\n#include &lt;arpa\/inet.h&gt;\n#include &lt;netinet\/in.h&gt;\n\n\/\/ TCP\u914d\u7f6e\n    \/\/1\u3001\u521b\u5efasocket\u5957\u63a5\u5b57\n        \/\/ AF_INET\uff08\u5730\u5740\u57df\uff1aIPV4\uff09\uff0cAF_INET6\uff08\u5730\u5740\u57df\uff1aIPV6\uff09\n        \/\/ SOCK_STREAM\uff08\u5957\u63a5\u5b57\u7c7b\u578b \u6d41\u5f0f TCP \u5957\u63a5\u5b57\uff09\uff0cSOCK_DGRAM\uff1a\uff08\u5957\u63a5\u5b57\u7c7b\u578b \u6570\u636e\u62a5 UDP \u5957\u63a5\u5b57\uff09\n        \/\/ 0\uff08\u534f\u8bae\u7c7b\u578b \u9ed8\u8ba4\uff09\uff0c\u8fd4\u56de-1\u8868\u793a\u521b\u5efa\u5931\u8d25\n    int sockfd=socket(AF_INET,SOCK_STREAM,0);\n    if(sockfd&lt;0)\n        return -1;\n\n    \/\/2\u3001\u914d\u7f6e\u672c\u5730IP\u548c\u7aef\u53e3\n    struct sockaddr_in server;                      \/\/\u7edf\u4e00\u63a5\u53e3sockaddr_in \u5bf9\u5e94 IPV4\n    server.sin_family=AF_INET;\n    server.sin_port=htons(atoi(\"1122\"));                \/\/server\u7684\u7aef\u53e3\uff08\u672c\u673a\u76d1\u542c\u7684\u7aef\u53e3\uff09\n    server.sin_addr.s_addr=inet_addr(\"192.168.1.100\");  \/\/server\u7684IP\uff08\u672c\u673aIP\uff09\n\n    \/\/3\u3001\u7ed1\u5b9a\u672c\u5730IP\u548c\u7aef\u53e3\n    int bind_result = bind(sockfd, (struct sockaddr*)&amp;server, sizeof(server));\n    if (bind_result == -1)\n    {\n        close(sockfd);\n        return -1;\n    }\n\n    \/\/4\u3001\u5f00\u59cb\u76d1\u542c\n    int listen_result = listen(sockfd,5); \n    if(listen_result == -1)\n        return -1;\n\n    \/\/5\u3001\u5efa\u7acb\u8fde\u63a5\n    struct sockaddr_in client;\n    socklen_t len = sizeof(client);\n    int  new_fd = accept(sockfd, (struct sockaddr*)&amp;client, &amp;len);\n\n\/\/ TCP\u6536\u53d1\n    \/\/\u63a5\u6536\n    unsigned char buff_recv[1024];              \/\/\u5b9a\u4e49\u63a5\u6536\u7684\u6570\u636e\u7f13\u5b58\n    memset(buff_recv, 0x00, sizeof(buff_recv)); \/\/\u521d\u59cb\u5316\u4e3a0\n    recv(new_fd, buff_recv, sizeof(buff_recv)-1, 0);\/\/\u963b\u585e\u63a5\u6536 recv(sockfd, \u6570\u636e\u7f13\u5b58\uff0c\u63a5\u6536\u6570\u636e\u957f\u5ea6\uff0c\u9ed8\u8ba40)\n    \/\/\u53d1\u9001\n    unsigned char buff_send[2]={0x01,0x02}\uff1b \/\/\u5b9a\u4e49\u4e00\u4e2a\u5f85\u53d1\u9001\u7684\u6570\u636e\n    send(new_fd, buff_send, sizeof(buff_send), 0);  \/\/\u53d1\u51fa send(sockfd\uff0c\u6570\u636e\uff0c\u6570\u636e\u957f\u5ea6\uff0c\u9ed8\u8ba40)\n\n\/\/\u5173\u95edsocket\n    close(sockfd);<\/code><\/pre>\n<h2>2 UDP<\/h2>\n<h3>\u5e7f\u64ad\u53d1\u9001<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u5934\u6587\u4ef6\n#include &lt;sys\/socket.h&gt;\n#include &lt;arpa\/inet.h&gt;\n#include &lt;netinet\/in.h&gt;\n\n\/\/ UDP\u914d\u7f6e\n    \/\/1\u3001\u521b\u5efasocket\u5957\u63a5\u5b57\n        \/\/ AF_INET\uff08\u5730\u5740\u57df\uff1aIPV4\uff09\uff0cAF_INET6\uff08\u5730\u5740\u57df\uff1aIPV6\uff09\n        \/\/ SOCK_STREAM\uff08\u5957\u63a5\u5b57\u7c7b\u578b \u6d41\u5f0f TCP \u5957\u63a5\u5b57\uff09\uff0cSOCK_DGRAM\uff1a\uff08\u5957\u63a5\u5b57\u7c7b\u578b \u6570\u636e\u62a5 UDP \u5957\u63a5\u5b57\uff09\n        \/\/ 0\uff08\u534f\u8bae\u7c7b\u578b \u9ed8\u8ba4\uff09\uff0c\u8fd4\u56de-1\u8868\u793a\u521b\u5efa\u5931\u8d25\n        int sockfd = socket(AF_INET, SOCK_DGRAM, 0);\n        if(-1==sockfd)\n            return -1;\n\n    \/\/2\u3001\u914d\u7f6esocket\u4e3a\u5e7f\u64ad\u7c7b\u578b\n        const int opt = 1;   \n        int bro_result = setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char *)&amp;opt, sizeof(opt));  \n        if(bro_result == -1)  \n            return -1;  \n\n    \/\/3\u3001\u914d\u7f6e\u5e7f\u64ad\u5730\u5740\u548c\u7aef\u53e3\n        struct sockaddr_in addr_to;  \n        socklen_t addr_to_len=sizeof(addr_to);\n        memset(&amp;addr_to, 0, addr_to_len);\n        addr_to.sin_family=AF_INET;   \n        addr_to.sin_port=htons(6000);  \n        addr_to.sin_addr.s_addr=htonl(INADDR_BROADCAST);  \n\n\/\/ UDP\u5e7f\u64ad\u63a5\u6536  \n    \/\/ \u5b9a\u4e49\u6570\u636e\u7f13\u5b58\n        char buffer[] = {\"abcdef\"};\n    \/\/\u53d1\u9001  \n        int ret=sendto(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&amp;addr_to, addr_to_len);   \n\n\/\/\u5173\u95edsocket\n    close(sockfd);<\/code><\/pre>\n<h3>\u5e7f\u64ad\u63a5\u6536<\/h3>\n<pre><code class=\"language-cpp\">\/\/\u5934\u6587\u4ef6\n#include &lt;sys\/socket.h&gt;\n#include &lt;arpa\/inet.h&gt;\n#include &lt;netinet\/in.h&gt;\n\n\/\/ UDP\u914d\u7f6e\n    \/\/1\u3001\u521b\u5efasocket\u5957\u63a5\u5b57\n        \/\/ AF_INET\uff08\u5730\u5740\u57df\uff1aIPV4\uff09\uff0cAF_INET6\uff08\u5730\u5740\u57df\uff1aIPV6\uff09\n        \/\/ SOCK_STREAM\uff08\u5957\u63a5\u5b57\u7c7b\u578b \u6d41\u5f0f TCP \u5957\u63a5\u5b57\uff09\uff0cSOCK_DGRAM\uff1a\uff08\u5957\u63a5\u5b57\u7c7b\u578b \u6570\u636e\u62a5 UDP \u5957\u63a5\u5b57\uff09\n        \/\/ 0\uff08\u534f\u8bae\u7c7b\u578b \u9ed8\u8ba4\uff09\uff0c\u8fd4\u56de-1\u8868\u793a\u521b\u5efa\u5931\u8d25\n        int sockfd = socket(AF_INET, SOCK_DGRAM, 0);\n        if(-1==sockfd)\n            return -1;\n\n    \/\/2\u3001\u8bbe\u7f6e\u63a5\u6536\u7684IP\u548c\u7aef\u53e3\n        struct sockaddr_in addr_local;\n        socklen_t addr_local_len=sizeof(addr_local);\n        memset(&amp;addr_local, 0, addr_local_len);\n        addr_local.sin_family      = AF_INET;               \/\/ Use IPV4\n        addr_local.sin_port        = htons(6000);           \/\/ \u7ed1\u5b9a\u7aef\u53e3          \n        addr_local.sin_addr.s_addr = htonl(INADDR_ANY);     \/\/ \u63a5\u6536\u4efb\u610fIP\u53d1\u6765\u7684\u6570\u636e\n\n    \/\/3\u3001\u7ed1\u5b9a\u4e0a\u8ff0\u8bbe\u7f6e\u5230socket\n        int bind_result = bind(sockfd, (struct sockaddr*)&amp;addr_local, addr_local_len); \n        if (bind_result == -1)\n        {\n            close(sockfd);\n            return -1;\n        }\n\n\/\/ UDP\u5e7f\u64ad\u63a5\u6536  \n    \/\/ \u5b9a\u4e49\u6570\u636e\u7f13\u5b58\n        char buffer[30];\n        memset(buffer, 0, 30);\n\n        struct sockaddr_in addr_from;               \/\/ \u7528\u4e8e\u4fdd\u5b58\u6d88\u606f\u6765\u6e90\u7684\u5730\u5740\uff0c\u5373\u6570\u636e\u7531\u54ea\u4e2aIP\u5e7f\u64ad\u7684\n        socklen_t addr_from_len=sizeof(addr_from);\n   \/\/\u63a5\u6536     \n        int len = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&amp;addr_from, &amp;addr_from_len);\n\n\/\/\u5173\u95edsocket\n    close(sockfd);<\/code><\/pre>\n<h2>3 \u975e\u963b\u585e\u63a5\u6536<\/h2>\n<pre><code class=\"language-cpp\">#include &lt;fcntl.h&gt;  \/\/\u63a5\u6536\u6570\u636e\u963b\u585e\u4e0e\u5426\uff0c\u9ed8\u8ba4\u4e3a\u963b\u585e\u6a21\u5f0f\n\n\/\/\u914d\u7f6e\u4e3a\u975e\u963b\u585e\u6a21\u5f0f\uff08\u4e0d\u7528ioctl\uff09\n    int flag_fcntl = fcntl(sockfd, F_GETFL, 0);\n    fcntl(sockfd, F_SETFL, flag_fcntl|O_NONBLOCK);<\/code><\/pre>\n<h2>4 recv recvfrom read send sendto write<\/h2>\n<pre><code class=\"language-cpp\">ssize_t write(int fd, const void*buf, size_t nbytes); \/\/ssize_t \u5373\u6709\u7b26\u53f7\u7684size_t\nssize_t read(int fd, void *buf, size_t nbyte);\n\nint recv(int sockfd, void *buf, int len, int flags);\nint send(int sockfd, void *buf, int len, int flags);\n\nint recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);\nint sendto(int sockfd, const void *buf, int len, unsigned int flags, const struct sockaddr *to, int tolen);<\/code><\/pre>\n<ol>\n<li>\u53c2\u8003\uff1a<a href=\"https:\/\/blog.csdn.net\/sea_snow\/article\/details\/112260750\">Linux\u4e0b\uff0cwrite\/read\uff0crecv\/send\uff0c recvfrom\/sendto\u7684\u533a\u522b<\/a><\/li>\n<li>read\/wirte\u662f\u901a\u7528\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u64cd\u4f5c\uff1brecv\/send \u901a\u5e38\u5e94\u7528\u4e8eTCP\uff1brecvfrom\/sendto\u901a\u5e38\u5e94\u7528\u4e8eUDP\u3002<\/li>\n<li>recv\/send\u51fd\u6570\u7684\u6700\u540e\u4e00\u4e2a\u53c2\u6570\u4e3a0\u65f6\uff0c\u529f\u80fd\u4e0a\u4e0eread\u548cwrite\u57fa\u672c\u4e00\u81f4\u3002<\/li>\n<li>read\/wirte\uff1a\u4ece\u6587\u4ef6\u63cf\u8ff0\u7b26fd\u4e2d\u76f4\u63a5\u8bfb\u5199\u6570\u636e\u3002<\/li>\n<li>recv\/send\uff1a\u589e\u52a0\u7b2c\u56db\u4e2a\u53c2\u6570\u63a7\u5236\u8bfb\u5199\u64cd\u4f5c\u3002<\/li>\n<li>recvfrom\/sendto\uff1a\u63a5\u6536\u6570\u636e\u65f6\u83b7\u53d6\u5bf9\u65b9IP\uff0c\u53d1\u9001\u6570\u636e\u65f6\u6307\u660e\u5bf9\u65b9IP\u3002<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>&emsp;&emsp;\u8fd9\u4e00\u7cfb\u5217\u6587\u7ae0\u7684\u76ee\u7684\u662f\u5728\u5b66\u4e60\u4e86C++\u57fa\u7840\u540e\uff0c\u7ee7\u7eed\u8865\u5145\u4e00\u4e9bC++\u57fa\u7840\u548c\u8fdb\u9636\u7684\u77e5\u8bc6\u70b9\uff0c\u5305\u62ecC++11\u7684\u76f8\u5173\u5185\u5bb9\u3002 1 TCP client \/\/\u5934\u6587\u4ef6 #include &lt;sys\/socket.h&gt; #include &lt;arpa\/inet.h&gt; #include &lt;netinet\/in.h&gt; \/\/ TCP\u914d\u7f6e \/\/1\u3001\u521b\u5efasocket\u5957\u63a5\u5b57 \/\/ AF_INET\uff08\u5730\u5740\u57df\uff1aIPV4\uff09\uff0cAF_INET6\uff08\u5730\u5740\u57df\uff1aIPV6\uff09 \/\/ SOCK_STREAM\uff08\u5957\u63a5\u5b57\u7c7b\u578b \u6d41\u5f0f TCP \u5957\u63a5\u5b57\uff09\uff0cSOCK_DGRAM\uff1a\uff08\u5957\u63a5\u5b57\u7c7b\u578b \u6570\u636e\u62a5 UDP \u5957\u63a5\u5b57\uff09 \/\/ 0\uff08\u534f\u8bae\u7c7b\u578b \u9ed8\u8ba4\uff09\uff0c\u8fd4\u56de-1\u8868\u793a\u521b\u5efa\u5931\u8d25 int sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd&lt;0) return -1; \/\/2\u3001\u914d\u7f6eIP\u548c\u7aef\u53e3 struct sockaddr_in srv; \/\/\u7edf\u4e00\u63a5\u53e3sockaddr_in \u5bf9\u5e94 IPV4 srv.sin_family=AF_INET; srv.sin_port=htons(atoi(&#8220;1122&#8221;)); \/\/server\u7684\u7aef\u53e3 srv.sin_addr.s_addr=inet_addr(&#8220;192.168.1.100&#8221;); \/\/server\u7684IP \/\/3\u3001\u8fde\u63a5 socklen_t len=sizeof(struct sockaddr_in); if(connect(sockfd,(struct sockaddr*)&amp;srv,len)&lt;0) return -1; \/\/ TCP\u6536\u53d1 \/\/\u63a5\u6536 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[],"_links":{"self":[{"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/posts\/183"}],"collection":[{"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/47.103.123.166\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=183"}],"version-history":[{"count":1,"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/posts\/183\/revisions"}],"predecessor-version":[{"id":184,"href":"http:\/\/47.103.123.166\/index.php?rest_route=\/wp\/v2\/posts\/183\/revisions\/184"}],"wp:attachment":[{"href":"http:\/\/47.103.123.166\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/47.103.123.166\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=183"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/47.103.123.166\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}