Go網絡編程:基于TCP的網絡服務端與客戶端

Go 語言的?net?包為網絡編程提供了簡潔高效的接口。我們可以使用它快速構建 TCP 網絡服務,如聊天服務器、RPC、微服務通信等。


一、TCP簡介

TCP(Transmission Control Protocol)是面向連接的、可靠的傳輸協議,通信模型為客戶端-服務端(Client-Server)。

基本流程:

Client?----->?Server(連接)
Client?<---->?Server(數據收發)
Client?-----X?Server(斷開)

二、TCP服務端開發流程

1. 基本步驟
  • ? 創建監聽器?net.Listen("tcp", address)
  • ? 接收連接?ln.Accept()
  • ? 啟動協程處理每個連接
2. 示例代碼:簡單回顯服務端
package?mainimport?("bufio""fmt""net"
)func?main()?{ln,?err?:=?net.Listen("tcp",?":8000")if?err?!=?nil?{panic(err)}fmt.Println("Server?is?listening?on?:8000...")for?{conn,?err?:=?ln.Accept()if?err?!=?nil?{fmt.Println("Accept?error:",?err)continue}go?handleConnection(conn)}
}func?handleConnection(conn?net.Conn)?{defer?conn.Close()fmt.Println("Client?connected:",?conn.RemoteAddr())scanner?:=?bufio.NewScanner(conn)for?scanner.Scan()?{msg?:=?scanner.Text()fmt.Println("Received:",?msg)conn.Write([]byte("Echo:?"?+?msg?+?"\n"))}
}

三、TCP客戶端開發流程

1. 基本步驟
  • ? 使用?net.Dial("tcp", address)?發起連接
  • ? 使用?conn.Write()?發送數據
  • ? 使用?conn.Read()?或?bufio.Scanner?接收響應
2. 示例代碼:簡單回顯客戶端
package?mainimport?("bufio""fmt""net""os"
)func?main()?{conn,?err?:=?net.Dial("tcp",?"localhost:8000")if?err?!=?nil?{panic(err)}defer?conn.Close()fmt.Println("Connected?to?server.")scanner?:=?bufio.NewScanner(os.Stdin)for?{fmt.Print("Input:?")if?!scanner.Scan()?{break}text?:=?scanner.Text()conn.Write([]byte(text?+?"\n"))reply?:=?bufio.NewReader(conn)msg,?_?:=?reply.ReadString('\n')fmt.Print("Server?reply:?"?+?msg)}
}

四、服務端并發處理連接

  • ? 每個連接使用?go handleConnection(conn)?啟動一個 goroutine。
  • ? 利用 channel、sync 等包實現更復雜的控制邏輯。
  • ? 避免 goroutine 泄漏,及時關閉連接。

五、進階技巧與注意事項

問題建議
粘包/拆包問題采用固定長度協議或使用?\n?等分隔符協議
異常斷開檢測讀取錯誤后及時清理資源
超時控制使用?conn.SetDeadline?設置讀寫超時
多客戶端廣播/聊天群使用 map 管理連接池,遍歷發送消息

六、實戰小案例:群聊服務端片段

var?clients?=?make(map[net.Conn]string)
var?broadcast?=?make(chan?string)func?main()?{go?broadcaster()//?省略監聽與連接處理...
}func?handleConnection(conn?net.Conn)?{defer?conn.Close()clients[conn]?=?conn.RemoteAddr().String()for?scanner.Scan()?{msg?:=?scanner.Text()broadcast?<-?clients[conn]?+?":?"?+?msg}delete(clients,?conn)
}func?broadcaster()?{for?{msg?:=?<-broadcastfor?conn?:=?range?clients?{fmt.Fprintln(conn,?msg)}}
}

七、總結

  • ? TCP 是基礎但強大的通信方式,適用于高可靠性場景。
  • ? Go 的并發模型使構建高性能網絡服務變得簡單。
  • ? 在生產環境中,還需結合日志、連接池、協議封裝等技術。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85789.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【StarRocks系列】架構、核心概念

目錄 一、架構&#xff1a;分布式 MPP 列式存儲 向量化引擎 二、存儲&#xff1a;高性能列式存儲引擎 三、表設計&#xff1a;三類模型適配不同場景 四、數據寫入&#xff1a;多種方式支持實時與批量 五、數據讀取&#xff1a;極致優化的查詢引擎 總結&#xff1a;Star…

從源碼到生產:Apache 2.4.57 自動化安裝實戰指南(附腳本)

引言&#xff1a;為何選擇源碼安裝 Apache&#xff1f; 在服務器運維場景中&#xff0c;源碼編譯安裝 Apache HTTP Server 是實現精細化配置的重要方式。相比包管理器安裝&#xff0c;源碼安裝可自定義模塊組合、適配特定依賴環境&#xff0c;并精確控制版本。本文將通過自動化…

iOS開發中的安全實踐:如何通過Ipa混淆與加固確保應用安全

隨著移動應用技術的不斷發展&#xff0c;開發者越來越重視應用的安全性&#xff0c;尤其是iOS應用。無論是面對大規模的數據泄露問題&#xff0c;還是在應用上線后避免被逆向破解&#xff0c;開發者們都需要采取一系列技術手段來保護應用。然而&#xff0c;很多開發者在應用開發…

JAVA實戰開源項目:智慧生活商城系統 (Vue+SpringBoot) 附源碼

本文項目編號 T 245 &#xff0c;文末自助獲取源碼 \color{red}{T245&#xff0c;文末自助獲取源碼} T245&#xff0c;文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

GNU Octave 基礎教程(8):GNU Octave 常用數學函數

目錄 一、基本算術運 二、初等數學函數 三、三角函數與反三角函數 四、統計函數 五、復數與其他函數 ? 小結 &#x1f51c; 下一講預告 GNU Octave 內置了大量數學函數&#xff0c;涵蓋初等數學、線性代數、復數運算、統計函數等&#xff0c;非常適合科研、工程計算使用…

Go語言中的文件與IO:JSON、CSV、XML處理

在數據交換與存儲中&#xff0c;JSON、CSV、XML 是常見格式。Go 標準庫為這些格式提供了強大且易用的支持&#xff0c;涵蓋結構體映射、讀寫文件、編碼解碼等操作。 一、JSON處理&#xff08;encoding/json&#xff09; 1. 基本使用&#xff1a;結構體 <-> JSON type U…

三種語言寫 MCP

參考 https://zhuanlan.zhihu.com/p/1915029704936760261 https://www.5ee.net/archives/tmXJAgWz https://github.com/modelcontextprotocol/python-sdk https://github.com/modelcontextprotocol/typescript-sdk https://modelcontextprotocol.io/quickstart/server https:/…

Python訓練營-Day38-Dataset和Dataloader類

在遇到大規模數據集時&#xff0c;顯存常常無法一次性存儲所有數據&#xff0c;所以需要使用分批訓練的方法。為此&#xff0c;PyTorch提供了DataLoader類&#xff0c;該類可以自動將數據集切分為多個批次batch&#xff0c;并支持多線程加載數據。此外&#xff0c;還存在Datase…

SVN上傳代碼

SVN&#xff08;Subversion&#xff09;是一個常用的版本控制系統&#xff0c;提供了對代碼管理和協作的支持。以下是SVN常見操作&#xff08;如獲取代碼、上傳代碼、合并沖突處理等&#xff09;的命令行流程及實例&#xff1a; 1. 獲取代碼&#xff08;Checkout&#xff09; 在…

【appium】2.初始連接腳本配置

連接配置 from appium import webdriver desired_caps {platformName: Android,automationName: UIAutomator2,deviceName: ZTEB880,appPackage: com.taobao.taobao,appActivity: com.taobao.tao.welcome.Welcome,noReset: True }driver webdriver.Remote(http://localhost:…

FliTik翻頁時鐘v1.1.25.36,支持安卓TV/手機/車機+windows電腦端

FliTik翻頁時鐘v1.1.25.36&#xff0c;支持安卓TV/手機/車機windows電腦端 FliTik翻頁時鐘是一款集高顏值與強大功能于一身的全平臺數字時鐘工具類應用&#xff0c;支持TV、iOS、安卓、PC以及鴻蒙系統。它不僅擁有精美的翻頁動畫…

以AI賦能創意未來:即夢3.0與Seedance1.0Lite重磅登陸POE!

近年來&#xff0c;隨著人工智能技術的不斷突破&#xff0c;AI模型的應用場景也在逐漸拓寬。在這一過程中&#xff0c;如何整合和利用現有的AI技術&#xff0c;實現更為便捷的創作服務&#xff0c;成為了許多科技企業關注的焦點。近日&#xff0c;全球知名的AI模型整合平臺POE正…

云計算與5G:如何利用5G網絡優化云平臺的性能

想象一下&#xff0c;你正在用手機看視頻、進行在線游戲&#xff0c;甚至是使用云存儲來保存你的重要文件。所有這些背后&#xff0c;其實都離不開一個無形的力量——云計算。而今天&#xff0c;5G網絡的出現&#xff0c;就像為這些云服務加裝了一對翅膀&#xff0c;讓它們飛得…

GPT-1 與 BERT 架構

GPT-1 架構特點 僅解碼器架構&#xff1a;擯棄了傳統transformer中的編碼器層&#xff0c;而是直接用解碼器和自注意力&#xff0c;同時拋棄掉了交叉多頭注意力層&#xff0c;自注意力通過mask來完成計算。注意力塊添加到12個&#xff0c;Attention的輸出維數為762維&#xff0…

Day04_C語言基礎數據結構重點復習筆記20250618

1.什么是計算機的大小端存儲&#xff1f; 答&#xff1a;大端是數據的高位字節存儲在低地址&#xff0c;低位字節存儲在高地址&#xff0c;網絡協議&#xff08;如TCP/IP&#xff09;通常采用大端序&#xff08;稱為“網絡字節序”&#xff09;。例如&#xff1a;32位整數 0x12…

基于OpenSSL實現AES-CBC 128算法的 SeedKey DLL的生成與使用

&#x1f345; 我是螞蟻小兵&#xff0c;專注于車載診斷領域&#xff0c;尤其擅長于對CANoe工具的使用&#x1f345; 尋找組織 &#xff0c;答疑解惑&#xff0c;摸魚聊天&#xff0c;博客源碼&#xff0c;點擊加入&#x1f449;【相親相愛一家人】&#x1f345; 玩轉CANoe&…

進程間通信、線程間通信

進程間通信、線程間通信 進程間通行&#xff08;Inter-Process Communication&#xff0c; IPC&#xff09;和線程間通信&#xff08;Thread Communication&#xff09;的方式不完全相同&#xff0c;因為進程和線程的運行環境和特性不同 進程和線程的本質區別 進程 進程是操…

【FPGA學習】FPGA入門學習即數字邏輯復習

前言&#xff1a;最近開始學習FPGA了&#xff0c;希望通過博客記錄下每一次學習的過程&#xff0c;與大家共勉。 目錄 一、組合邏輯電路的設計&#xff08;工程學習引入&#xff09; 二、3-8譯碼器設計、下載和功能演示&#xff08;在的8段數碼管顯示&#xff09; 2.1 Logs…

ffmpeg python rgba圖片合成 4444格式mov視頻,保留透明通道

def convert_pngs_to_mov(input_pattern, output_path, frame_rate30):"""將BGRA四通道PNG序列轉換為ProRes 4444編碼的MOV視頻&#xff08;保留透明通道&#xff09;參數:input_pattern: PNG序列路徑模式&#xff08;如&#xff1a;"/path/to/frames/fram…

Java 實現 PDF 轉圖片功能:實戰教程 + 場景解析

作者:云起川南|專注 Java 實戰與自動化集成 在 PDF 文檔處理的各類業務場景中,“將 PDF 頁面轉為圖片”是一個高頻、剛需的功能,廣泛應用于 預覽展示、文件歸檔、圖片加密水印、OCR 文本識別 等系統中。 本文將帶你一步一步實戰如何使用 Java 實現 PDF 轉圖片 功能,使用開…