go語言開發(fā)tcp程序,go socket編程

在 Go 中實現(xiàn)一個支持并發(fā)的 TCP 服務端

TCP 和 UDP 服務端隨處可見,它們基于 TCP/IP 協(xié)議棧,通過網絡為客戶端提供服務。在這篇文章中,我將介紹如何使用 Go 語言開發(fā)一個用于返回隨機數(shù)、支持并發(fā)的 TCP 服務端。對于每一個來自 TCP 客戶端的連接,它都會啟動一個新的 goroutine(輕量級線程)來處理相應的請求。

創(chuàng)新互聯(lián)企業(yè)建站,十多年網站建設經驗,專注于網站建設技術,精于網頁設計,有多年建站和網站代運營經驗,設計師為客戶打造網絡企業(yè)風格,提供周到的建站售前咨詢和貼心的售后服務。對于網站建設、成都網站設計中不同領域進行深入了解和探索,創(chuàng)新互聯(lián)在網站建設中充分了解客戶行業(yè)的需求,以靈動的思維在網頁中充分展現(xiàn),通過對客戶行業(yè)精準市場調研,為客戶提供的解決方案。

你可以在 GitHub 上找到本項目的源碼:concTcp.go。

這個程序的主要邏輯在 handleConnection 函數(shù)中,具體實現(xiàn)如下:

在 main 函數(shù)的實現(xiàn)部分,每當 TCP 服務端收到 TCP 客戶端的連接請求,它都會啟動一個新的 goroutine 來為這個請求提供服務。

首先, main 確保程序至少有一個命令行參數(shù)。注意,現(xiàn)有代碼并沒有檢查這個參數(shù)是否為有效的 TCP 端口號。不過,如果它是一個無效的 TCP 端口號, net.Listen 就會調用失敗,并返回一個錯誤信息,類似下面這樣:

net.Listen 函數(shù)用于告訴 Go 接受網絡連接,因而承擔了服務端的角色。它的返回值類型是 net.Conn ,后者實現(xiàn)了 io.Reader 和 io.Writer 接口。此外, main 函數(shù)中還調用了 rand.Seed 函數(shù),用于初始化隨機數(shù)生成器。最后, for 循環(huán)允許程序一直使用 Accept 函數(shù)來接受 TCP 客戶端的連接請求,并以 goroutine 的方式來運行 handleConnection(c) 函數(shù),處理客戶端的后續(xù)請求。

net.Listen 函數(shù)的第一個參數(shù)定義了使用的網絡類型,而第二個參數(shù)定義了服務端監(jiān)聽的地址和端口號。第一個參數(shù)的有效值為 tcp 、 tcp4 、 tcp6 、 udp 、 udp4 、 udp6 、 ip 、 ip4 、 ip6 、 Unix (Unix 套接字)、 Unixgram 和 Unixpacket ,其中: tcp4 、 udp4 和 ip4 只接受 IPv4 地址,而 tcp6 、 udp6 和 ip6 只接受 IPv6 地址。

concTCP.go 需要一個命令行參數(shù),來指定監(jiān)聽的端口號。當它開始服務 TCP 客戶端時,你會得到類似下面的輸出:

netstat 的輸出可以確認 congTCP.go 正在為多個 TCP 客戶端提供服務,并且仍在繼續(xù)監(jiān)聽建立連接的請求:

在上面輸出中,最后一行顯示了有一個進程正在監(jiān)聽 8001 端口,這意味著你可以繼續(xù)連接 TCP 的 8001 端口。第一行和第二行顯示了有一個已建立的 TCP 網絡連接,它占用了 8001 和 62556 端口。相似地,第三行和第四行顯示了有另一個已建立的 TCP 連接,它占用了 8001 和 62554 端口。

下面這張圖片顯示了 concTCP.go 在服務多個 TCP 客戶端時的輸出:

類似地,下面這張圖片顯示了兩個 TCP 客戶端的輸出(使用了 nc 工具):

你可以在 維基百科上找到更多關于 nc (即 netcat )的信息。

現(xiàn)在,你學會了如何用大約 65 行 Go 代碼來開發(fā)一個生成隨機數(shù)、支持并發(fā)的 TCP 服務端,這真是太棒了!如果你想要讓你的 TCP 服務端執(zhí)行別的任務,只需要修改 handleConnection 函數(shù)即可。

via:

作者:Mihalis Tsoukalos選題:lkxed譯者:lkxed校對:wxy

go語言TCP連接池rocket049/connpool使用

安裝:

go get -v -u github.com/rocket049/connpool

go get -v -u gitee.com/rocket049/connpool

rocket049/connpool 包是本人用go語言開發(fā)的,提供一個通用的TCP連接池,初始化參數(shù)包括最高連接數(shù)、超時秒數(shù)、連接函數(shù),放回連接池的連接被重新取出時,如果已經超時,將會自動重新連接;如果沒有超時,連接將被復用。

可調用的函數(shù):

調用示例:

Golang 網絡編程絲綢之路 - TCP/UDP 地址解析

TL;DR 在使用 Golang 編寫 TCP/UDP socket 的時候,第一步做的就是地址解析。

該函數(shù)返回的地址包含的信息如下:

TCPAddr 里, IP 既可以是 IPv4 地址,也可以是 IPv6 地址。 Port 就是端口了。 Zone 是 IPv6 本地地址所在的區(qū)域。

從返回結果看該函數(shù)的參數(shù), network 指 address 的網絡類型; address 指要解析的地址,會從中解析出我們想要的 IP , Port 和 Zone 。

從源碼中可以看出,參數(shù) network 只能是如下四個值,否則會得到一個錯誤。

解析過程跟 ResolveTCPAddr 的一樣,不過得到的是 *UDPAddr 。

UDPAddr 包含的信息如下:

網頁題目:go語言開發(fā)tcp程序,go socket編程
URL標題:http://m.kartarina.com/article42/heieec.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供定制網站靜態(tài)網站ChatGPT搜索引擎優(yōu)化自適應網站移動網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站建設網站維護公司
主站蜘蛛池模板: 久久国产精品无码HDAV| 亚洲av日韩aⅴ无码色老头| 波多野结衣AV无码| 亚洲AV区无码字幕中文色| 亚洲中文字幕无码中文| 天天看高清无码一区二区三区| 国产AV无码专区亚洲A∨毛片| 中文字幕亚洲精品无码| 成人无码AV一区二区| 久久AV高清无码| 夜夜添无码试看一区二区三区| 中文字幕AV无码一区二区三区| 国产精品无码无片在线观看| 日韩免费a级毛片无码a∨| 日韩国产精品无码一区二区三区| 无码人妻精一区二区三区| 精品亚洲AV无码一区二区三区| 中文成人无码精品久久久不卡 | 亚洲人成影院在线无码观看 | 无码爆乳护士让我爽| 超清无码一区二区三区| 色综合久久久无码中文字幕 | 亚洲私人无码综合久久网| 国产综合无码一区二区辣椒 | 一本色道久久综合无码人妻| 最新国产AV无码专区亚洲| 国产免费av片在线无码免费看| 中文字幕无码成人免费视频| 91久久精品无码一区二区毛片| 中文字幕av无码专区第一页| 亚洲精品无码你懂的网站| 无码国内精品久久人妻麻豆按摩 | 日韩精品无码免费专区午夜不卡| 男人av无码天堂| 无码人妻丰满熟妇区BBBBXXXX | 亚洲成av人片在线观看无码不卡| 无码精品蜜桃一区二区三区WW| 亚洲AV综合色区无码一二三区| 亚洲中文字幕无码久久2020| 亚洲另类无码专区丝袜| 免费无码肉片在线观看|