{"id":43,"date":"2026-02-17T20:33:11","date_gmt":"2026-02-17T12:33:11","guid":{"rendered":"http:\/\/43.138.147.217\/?p=43"},"modified":"2026-02-17T20:33:11","modified_gmt":"2026-02-17T12:33:11","slug":"go%e5%bc%80%e5%8f%91%e4%bc%81%e4%b8%9a%e7%ba%a7%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%bd%91%e5%85%b3%ef%bc%882%ef%bc%89golang%e5%88%9b%e5%bb%ba-tcp-%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%92%8c%e5%ae%a2%e6%88%b7","status":"publish","type":"post","link":"https:\/\/fableary.top\/?p=43","title":{"rendered":"Go\u5f00\u53d1\u4f01\u4e1a\u7ea7\u5fae\u670d\u52a1\u7f51\u5173\uff082\uff09Golang\u521b\u5efa TCP \u670d\u52a1\u5668\u548c\u5ba2\u6237\u7aef"},"content":{"rendered":"\n<p>\u670d\u52a1\u7aef\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport (\n\t\"fmt\"\n\t\"net\"\n)\n\nfunc main() {\n\t\/\/ 1 \u76d1\u542c\u7aef\u53e3\n\tlistener, err := net.Listen(\"tcp\", \"0.0.0.0:9090\")\n\tif err != nil {\n\t\tfmt.Printf(\"listen fail, err: %v\\n\", err)\n\t\treturn\n\t}\n\n\t\/\/ 2 \u5efa\u7acb\u5957\u63a5\u5b57\u8fde\u63a5\n\tfor {\n\t\tconn, err := listener.Accept()\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"accept fail, err: %v\\n\", err)\n\t\t\tcontinue\n\t\t}\n\n\t\t\/\/ 3 \u521b\u5efa\u5904\u7406\u534f\u7a0b\n\t\tgo process(conn)\n\t}\n}\n\nfunc process(conn net.Conn) {\n\tdefer conn.Close()\n\tfor {\n\t\tvar buf &#091;128]byte\n\t\tn, err := conn.Read(buf&#091;:])\n\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"read from connect failed, err: %v\\n\", err)\n\t\t\tbreak\n\t\t}\n\t\tstr := string(buf&#091;:n])\n\t\tfmt.Printf(\"receive from client, data: %v\\n\", str)\n\t}\n}\n<\/code><\/pre>\n\n\n\n<p>\u5ba2\u6237\u7aef\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"strings\"\n)\n\nfunc main() {\n\t\/\/ 1 \u8fde\u63a5\u670d\u52a1\u5668\n\tconn, err := net.Dial(\"tcp\", \"localhost:9090\")\n\tdefer conn.Close()\n\tif err != nil {\n\t\tfmt.Printf(\"connect failed, err: %v\\n\", err.Error())\n\t\treturn\n\t}\n\n\t\/\/ 2 \u8bfb\u53d6\u547d\u4ee4\u884c\u8f93\u5165\n\tinputReader := bufio.NewReader(os.Stdin)\n\tfor {\n\t\t\/\/ 3 \u4e00\u76f4\u8bfb\u53d6\u76f4\u5230\u8bfb\u5230\\n\n\t\tinput, err := inputReader.ReadString('\\n')\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"read from console failed, err: %v\\n\", err)\n\t\t\tbreak\n\t\t}\n\t\t\/\/ 4 \u8bfb\u5230 Q \u65f6\u505c\u6b62\n\t\ttrimmedInput := strings.TrimSpace(input)\n\t\tif trimmedInput == \"Q\" {\n\t\t\tbreak\n\t\t}\n\t\t\/\/ 5 \u56de\u590d\u670d\u52a1\u5668\u6d88\u606f\n\t\t_, err = conn.Write(&#091;]byte(trimmedInput))\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"write failed, err: %v\\n\", err)\n\t\t\tbreak\n\t\t}\n\t}\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\u63a2\u8ba8\uff1a\u5982\u679c\u4e0d\u6267\u884c conn.Close() \u6307\u4ee4\u7684\u5f71\u54cd<\/strong><\/h4>\n\n\n\n<p>\u5ba2\u6237\u7aef\uff1a\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u6b63\u786e\u91ca\u653e\u8fde\u63a5\uff0c\u4e14\u8fde\u63a5\u72b6\u6001\u4e00\u76f4\u662f established\uff0c\u800c\u4e0d\u662f close_wait \uff08\u9700\u8981\u4f9d\u8d56\u94fe\u63a5\u72b6\u6001\u81ea\u52a8\u63a2\u6d4b\u89e3\u51b3\uff09<\/p>\n\n\n\n<p>\u670d\u52a1\u7aef\uff1a\u4f1a\u5bfc\u81f4\u670d\u52a1\u7aef\u4e00\u76f4\u5904\u4e8e close_wait \u72b6\u6001\uff0c\u5ba2\u6237\u7aef\u4e00\u76f4\u5904\u4e8e fin_wait_2\u72b6\u6001<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u670d\u52a1\u7aef\u4ee3\u7801\u5982\u4e0b\uff1a \u5ba2\u6237\u7aef\u4ee3\u7801\u5982\u4e0b\uff1a \u63a2\u8ba8\uff1a\u5982\u679c\u4e0d\u6267\u884c conn.Close() \u6307\u4ee4\u7684\u5f71\u54cd \u5ba2\u6237\u7aef\uff1a\u4f1a\u5bfc\u81f4\u65e0\u6cd5 &#8230; <a title=\"Go\u5f00\u53d1\u4f01\u4e1a\u7ea7\u5fae\u670d\u52a1\u7f51\u5173\uff082\uff09Golang\u521b\u5efa TCP \u670d\u52a1\u5668\u548c\u5ba2\u6237\u7aef\" class=\"read-more\" href=\"https:\/\/fableary.top\/?p=43\" aria-label=\"\u9605\u8bfb Go\u5f00\u53d1\u4f01\u4e1a\u7ea7\u5fae\u670d\u52a1\u7f51\u5173\uff082\uff09Golang\u521b\u5efa TCP \u670d\u52a1\u5668\u548c\u5ba2\u6237\u7aef\">\u9605\u8bfb\u66f4\u591a<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-43","post","type-post","status-publish","format-standard","hentry","category-gogateway"],"_links":{"self":[{"href":"https:\/\/fableary.top\/index.php?rest_route=\/wp\/v2\/posts\/43","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fableary.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fableary.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fableary.top\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/fableary.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=43"}],"version-history":[{"count":1,"href":"https:\/\/fableary.top\/index.php?rest_route=\/wp\/v2\/posts\/43\/revisions"}],"predecessor-version":[{"id":44,"href":"https:\/\/fableary.top\/index.php?rest_route=\/wp\/v2\/posts\/43\/revisions\/44"}],"wp:attachment":[{"href":"https:\/\/fableary.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fableary.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fableary.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}