【Hello Go】Go語言網絡編程

Go語言網絡編程

    • Go語言程序
      • 服務端
      • 客戶端
    • Http程序

有關網絡的基本知識我之前的博客介紹的很詳細 這里就不再贅述了 這里主要講解下Go語言網絡編程的語法

網絡基礎

協議

Go語言程序

我們建立一個tcp鏈接的步驟為 socket bind listen accept 但是在Go語言中 我們并不需要前兩步 并且listen 和 accept的結構都嵌入到了 net 網絡包當中 所以說我們只需要調用net包即可

服務端

package mainimport ("fmt""net""strings"
)func dealcoon(coon net.Conn) {// 接收到鏈接之后我們開始接受數據defer coon.Close() // 在這個函數結束的時候 我們關閉鏈接套接字ipaddress := coon.RemoteAddr().String()fmt.Println("新的鏈接已獲得 ip地址為", ipaddress)buf := make([]byte, 1024) // 開辟一個新的緩沖區來接受用戶的數據for { // 阻塞等待用戶發送的數據n, err := coon.Read(buf) // 從鏈接中讀取數據 相當于像buf中寫入數據  n為讀取的長度if err != nil {fmt.Println("conn read error")break} // 讀取失敗 出現了某些問題// 走到這里表示讀取成功 讀取了n個字節的數據 我們進行切片截取 只截取有效數據result := buf[:n]// 如果對方發送了exit 直接退出if "exit" == string(result) {println("收到退出信號 直接退出")return}// 如果是其他的數據 我們將數據大寫之后返回給客戶端coon.Write([]byte(strings.ToUpper(string(result))))}}func main() {// 首先創建一個監聽套接字listener, err := net.Listen("tcp", "127.0.0.1")if err != nil {println("listen error ")return}defer listener.Close()// 因為我們的tcp程序需要不斷的accept新數據 所以說這里要使用一個for循環for {//conn, err := listener.Accept()if err != nil {fmt.Println("accept error")break} // 跑到這里說明我們套接字的listen出現了錯誤// 這里直接分出一個協程去處理其他問題}
}

客戶端

package mainimport ("fmt""log""net"
)func main() {conn, err := net.Dial("tcp", "127.0.0.1")if err != nil {log.Fatal("conn error")} // 鏈接失敗// 到這里就是鏈接成功了for {fmt.Println("請輸入你要發送的數據")buf := make([]byte, 1024)fmt.Scan(&buf)// 向服務器發送數據conn.Write(buf)// 接受服務器的數據并打印出來n, err2 := conn.Read(buf) if err2!= nil {fmt.Println("出現讀取錯誤了") break}// 截取有效長度的字節result := buf[:n] fmt.Println(string(result))}
}

Http程序

有關http協議我之前的博客介紹的很詳細 大家如果想了解可以參考我的這幾篇博客 Http協議詳解

我們寫Http服務端程序時 需要包含 net/http

之后的使用方法如下

  • 首先我們需要注冊帶有 func(w http.ResponseWriter, r *http.Requests)簽名的函數
  • 其中 w 用來給客戶端發送各種數據 r用來獲取各個參數
  • 之后我們選擇使用 http.HandleFunc("/go", myHandler) 函數來注冊各個url對應的處理函數
  • 最后我們指定ip和端口進行監聽即可 代碼如下 http.ListenAndServe("127.0.0.1:8000", nil)

我們寫Http客戶端程序時 需要包含 net/http

這里的步驟就更簡單了

  • 直接使用 http.Get("http://127.0.0.1:8000/go") 函數 指定我們需要的url即可

之后就是對于數據業務的處理了 此處省略

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

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

相關文章

office word 使用筆記

office word 使用筆記 1. 功能1.1 格式快捷鍵1.2 復選框 2 遇到過的問題2.1 表格標題和表格距離過大 1. 功能 1.1 格式快捷鍵 復制格式:ctrl shift c 粘貼格式:ctrl shift v 1.2 復選框 方框位置和類型:“插入——高級符號——字體”選…

【追求卓越08】算法--排序算法

引導 今天開始介紹我們在工作中經常遇到的算法--排序。排序算法有很多,我們主要介紹以下幾種: 冒泡排序 插入排序 選擇排序 歸并排序 快速排序 計數排序 基數排序 桶排序 我們需要了解每一種算法的定義以及實現方式,并且掌握如何評…

LeetCode [簡單] 1. 兩數之和

給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,并返回它們的數組下標。 你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。 你可以按任意順序返回…

Leetcode——121 買賣股票的最佳時機

(超時。。。。。。&#xff09;除了暴力法我是真的。。。。。。 class Solution {public int maxProfit(int[] prices) {int len prices.length;int max0;for(int i0;i<len-1;i){for(int ji1;j<len;j){int income prices[j] - prices[i];if(income>max){maxincome;…

閃存組織結構概念

文章目錄 一、幾種不同類型閃存的參數&#xff1a;二、組織結構三、塊&#xff08;Block&#xff09;的結構擦除動作原理&#xff1a;寫操作讀操作 一、幾種不同類型閃存的參數&#xff1a; 參數項SLCMLCTLCQLC讀取時間/us20~2555~11075~170120~200寫入時間/us50~100400~15008…

Android設計模式--模板方法模式

一&#xff0c;定義 定義一個操作中的算法的框架&#xff0c;而將一些步驟延遲到子類中&#xff0c;使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 在面向對象的開發過程中&#xff0c;通常會遇到這樣一個問題&#xff0c;我們知道一個算法所需的關鍵步…

MR導游情景英語虛擬仿真實訓系統應用

MR導游情景英語虛擬仿真實訓系統應運而生。系統旨在為學生提供一種全新的培訓方式。 系統采用先進的MR混合現實技術&#xff0c;通過虛擬現實技術創建逼真的旅游場景&#xff0c;讓學生能夠身臨其境地體驗各種旅游活動。學生可以在系統中扮演導游的角色&#xff0c;與其他同學…

docker報錯standard init linux.go:228 exec user process caused: exec format error

1、報錯 使用Dockerfile自己做的服務鏡像&#xff0c;docker run時啟動失敗&#xff0c;報錯如下&#xff1a; standard init linux.go:228 exec user process caused: exec format error2、原因一 當前服務器的CPU架構和構建鏡像時的CPU架構不兼容。比如做鏡像是在arm機器下…

競賽選題 車道線檢測(自動駕駛 機器視覺)

0 前言 無人駕駛技術是機器學習為主的一門前沿領域&#xff0c;在無人駕駛領域中機器學習的各種算法隨處可見&#xff0c;今天學長給大家介紹無人駕駛技術中的車道線檢測。 1 車道線檢測 在無人駕駛領域每一個任務都是相當復雜&#xff0c;看上去無從下手。那么面對這樣極其…

云原生正在重塑軟件的整個生命周期(內附資料)

隨著企業數字化轉型進程的發展&#xff0c;企業面臨著新舊商業形態的劇變&#xff0c;顛覆和重構時刻都在發生。 企業需要更加快速地感知用戶側的需求變化并做出調整&#xff0c;才有可能在競爭中持續積累優勢。業務的個性化、敏捷化、智能化需求日益突顯&#xff0c;數字化應…

git merge 和 git rebase

一、是什么 在使用 git 進行版本管理的項目中&#xff0c;當完成一個特性的開發并將其合并到 master 分支時&#xff0c;會有兩種方式&#xff1a; git merge git rebasegit rebase 與 git merge都有相同的作用&#xff0c;都是將一個分支的提交合并到另一分支上&#xff0c;…

模版模式 設計模式

設計模式 總目錄 https://preparedata.blog.csdn.net/article/details/134512591 文章目錄 設計模式 總目錄一、案例二、抽象類模版 AbstractOrderTemplate&#xff08;頂層的訂單抽象類&#xff09;三、執行模版的實現類3.1 默認執行模版 DefaultOrder3.2 其他執行模版 Simlp…

19.悲觀鎖與樂觀鎖解析

1.悲觀鎖 悲觀鎖比較悲觀&#xff0c;它認為如果不鎖住這個資源&#xff0c;別的線程就會來爭搶&#xff0c;就會造成數據結果錯誤&#xff0c;所以悲觀鎖為了確保結果的正確性&#xff0c;會在每次獲取并修改數據時&#xff0c;都把數據鎖住&#xff0c;讓其他線程無法訪問該…

2023年亞太地區數學建模大賽 問題B

玻璃溫室中的微氣候法規 溫室作物的產量受到各種氣候因素的影響&#xff0c;包括溫度、濕度和風速[1]。其中&#xff0c;適宜的溫度和風速是植物生長[2]的關鍵。為了調節玻璃溫室內的溫度、風速等氣候因素&#xff0c;溫室的設計通常采用帶有溫室風扇的通風系統&#xff0c;如…

docker報錯

安裝 docker報錯&#xff1a; Docker Desktop requires the Server service to be enabled. 解決方法&#xff1a; 管理員身份打開cmd&#xff0c;輸入&#xff1a; services.msc開啟 server 服務。 docker啟動報錯&#xff1a; 打開 docker 界面報錯&#xff1a; Docke…

rabbit MQ的延遲隊列處理模型示例(基于SpringBoot延時插件實現)

rabbitMQ安裝插件rabbitmq-delayed-message-exchange 交換機由此type 表示組件安裝成功 生產者發送消息時設置延遲值 消息在交換機滯納至指定延遲后&#xff0c;進入隊列&#xff0c;被消費者消費。 組件注解類&#xff1a; package com.esint.configs;import org.springfra…

OpenAI再次與Altman談判;ChatGPT Voice正式上線

11月22日&#xff0c;金融時報消息&#xff0c;OpenAI迫于超過700名員工聯名信的壓力&#xff0c;再次啟動了與Sam Altman的談判&#xff0c;希望他回歸董事會。 在Sam確定加入微軟后&#xff0c;OpenAI超700名員工簽署了一封聯名信&#xff0c;要求Sam和Greg Brockman&#x…

Java檢測網絡是否正常通訊

Java是一種流行的編程語言&#xff0c;可以用于開發網絡應用程序。在網絡應用程序中&#xff0c;檢測IP地址和端口是否通常是必要的。本文將介紹如何使用Java檢測IP和端口。 Java檢測IP和端口的方法非常簡單。我們可以使用Java的Socket類來實現。下面的代碼片段演示了如何檢測…

用于 syslog 收集的協議:TCP、UDP、RELP

系統日志是從 Linux/Unix 設備和其他網絡設備&#xff08;如交換機、路由器和防火墻&#xff09;生成的日志 可以通過將 syslog 聚合到稱為 syslog 服務器、syslog 守護程序或 syslogd 的服務器來集中 syslog。在TCP、UDP和RELP協議的幫助下&#xff0c;系統日志從設備傳輸到系…

「快學Docker」監控和日志記錄容器的健康和性能

「快學Docker」監控和日志記錄容器的健康和性能 1. 容器健康狀態監控2. 性能監控3. 日志記錄幾種采集架構圖 4. 監控工具和平臺cAdvisor&#xff08;Container Advisor&#xff09;PrometheusGrafana 5. 自動化運維 1. 容器健康狀態監控 方法1&#xff1a;需要實時監測容器的運…