最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang套接字的實(shí)現(xiàn)

 更新時(shí)間:2024年10月30日 09:41:17   作者:get200  
Go語言中通過標(biāo)準(zhǔn)庫net實(shí)現(xiàn)套接字編程,涵蓋了TCP和UDP兩種網(wǎng)絡(luò)類型,通過這些基本概念和實(shí)際代碼示例,可以幫助理解和掌握Go語言中的套接字編程

在 Go 語言中,使用標(biāo)準(zhǔn)庫 net 來實(shí)現(xiàn)套接字編程。以下是有關(guān) Go 套接字的基本概念和示例。

1. 基本概念

  • 網(wǎng)絡(luò)類型
    • TCP:流套接字,提供可靠的、面向連接的通信。
    • UDP:數(shù)據(jù)報(bào)套接字,無連接,適用于快速傳輸。

2. TCP 套接字示例

服務(wù)器端代碼

package main

import (
    "fmt"
    "net"
)

func main() {
    // 創(chuàng)建 TCP 套接字
    listener, err := net.Listen("tcp", ":12345")
    if err != nil {
        fmt.Println("Error starting server:", err)
        return
    }
    defer listener.Close()

    fmt.Println("Waiting for a connection...")
    for {
        // 接受連接
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println("Error accepting connection:", err)
            continue
        }
        fmt.Println("Connection established from", conn.RemoteAddr())

        // 處理連接
        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()
    message := "Hello, Client!"
    conn.Write([]byte(message))
    fmt.Println("Message sent to client:", message)
}

客戶端代碼

package main

import (
    "fmt"
    "net"
)

func main() {
    // 連接到服務(wù)器
    conn, err := net.Dial("tcp", "localhost:12345")
    if err != nil {
        fmt.Println("Error connecting to server:", err)
        return
    }
    defer conn.Close()

    // 接收數(shù)據(jù)
    buffer := make([]byte, 1024)
    n, err := conn.Read(buffer)
    if err != nil {
        fmt.Println("Error reading from server:", err)
        return
    }

    fmt.Println("Received message from server:", string(buffer[:n]))
}

3. UDP 套接字示例

服務(wù)器端代碼

package main

import (
    "fmt"
    "net"
)

func main() {
    // 創(chuàng)建 UDP 套接字
    address, err := net.ResolveUDPAddr("udp", ":12345")
    if err != nil {
        fmt.Println("Error resolving address:", err)
        return
    }

    conn, err := net.ListenUDP("udp", address)
    if err != nil {
        fmt.Println("Error listening:", err)
        return
    }
    defer conn.Close()

    fmt.Println("Waiting for a connection...")
    for {
        buffer := make([]byte, 1024)
        n, addr, err := conn.ReadFromUDP(buffer)
        if err != nil {
            fmt.Println("Error reading from UDP:", err)
            continue
        }
        fmt.Println("Received message from", addr, ":", string(buffer[:n]))

        // 發(fā)送響應(yīng)
        response := []byte("Hello, UDP Client!")
        conn.WriteToUDP(response, addr)
    }
}

客戶端代碼

package main

import (
    "fmt"
    "net"
)

func main() {
    // 發(fā)送 UDP 數(shù)據(jù)包
    address, err := net.ResolveUDPAddr("udp", "localhost:12345")
    if err != nil {
        fmt.Println("Error resolving address:", err)
        return
    }

    conn, err := net.DialUDP("udp", nil, address)
    if err != nil {
        fmt.Println("Error connecting:", err)
        return
    }
    defer conn.Close()

    message := []byte("Hello, Server!")
    conn.Write(message)

    // 接收響應(yīng)
    buffer := make([]byte, 1024)
    n, _, err := conn.ReadFromUDP(buffer)
    if err != nil {
        fmt.Println("Error reading from server:", err)
        return
    }

    fmt.Println("Received message from server:", string(buffer[:n]))
}

4. 運(yùn)行示例

  • 首先在一個(gè)終端中運(yùn)行服務(wù)器代碼。
  • 然后在另一個(gè)終端中運(yùn)行客戶端代碼。

總結(jié)

Go 語言的 net 包使得套接字編程變得簡單而高效。通過使用 TCP 或 UDP 套接字,你可以輕松實(shí)現(xiàn)網(wǎng)絡(luò)通信。

到此這篇關(guān)于golang套接字的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)golang套接字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go計(jì)算某段代碼運(yùn)行所耗時(shí)間簡單實(shí)例

    Go計(jì)算某段代碼運(yùn)行所耗時(shí)間簡單實(shí)例

    這篇文章主要給大家介紹了關(guān)于Go計(jì)算某段代碼運(yùn)行所耗時(shí)間的相關(guān)資料,主要介紹了Golang記錄計(jì)算函數(shù)執(zhí)行耗時(shí)、運(yùn)行時(shí)間的一個(gè)簡單方法,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-11-11
  • 詳解Golang中日志庫glog的使用

    詳解Golang中日志庫glog的使用

    golang/glog?是?C++?版本?google/glog?的?Go?版本實(shí)現(xiàn),基本實(shí)現(xiàn)了原生?glog?的日志格式,下面大家就跟隨小編一起了解一下glog的具體使用吧
    2023-09-09
  • 詳解Go語言微服務(wù)開發(fā)框架之Go chassis

    詳解Go語言微服務(wù)開發(fā)框架之Go chassis

    分布式系統(tǒng)中每個(gè)進(jìn)程的動(dòng)態(tài)配置管理及運(yùn)行時(shí)熱加載就成為了一個(gè)亟待解決的問題。go chassis汲取了netflix的archaius框架經(jīng)驗(yàn),并做出來自己的創(chuàng)新特性。
    2021-05-05
  • Golang中多個(gè)if代碼優(yōu)化小技巧

    Golang中多個(gè)if代碼優(yōu)化小技巧

    這篇文章主要為大家詳細(xì)介紹了Golang中一些常用的if代碼優(yōu)化小技巧,w文中的示例代碼簡潔易懂,具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • go local history本地歷史恢復(fù)代碼神器

    go local history本地歷史恢復(fù)代碼神器

    這篇文章主要為大家介紹了go local history本地歷史恢復(fù)代碼神器的使用功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go使用Google?Gemini?Pro?API創(chuàng)建簡單聊天機(jī)器人

    Go使用Google?Gemini?Pro?API創(chuàng)建簡單聊天機(jī)器人

    這篇文章主要為大家介紹了Go使用Google?Gemini?Pro?API創(chuàng)建簡單聊天機(jī)器人實(shí)現(xiàn)過程詳解,本文將通過最新的gemini?go?sdk來實(shí)現(xiàn)命令行聊天機(jī)器人
    2023-12-12
  • Go語言interface詳解

    Go語言interface詳解

    這篇文章主要介紹了Go語言interface詳解,本文講解了什么是interface、interface類型、interface值、空interface、interface函數(shù)參數(shù)等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼

    golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • golang?gin框架實(shí)現(xiàn)大文件的流式上傳功能

    golang?gin框架實(shí)現(xiàn)大文件的流式上傳功能

    這篇文章主要介紹了golang?gin框架中實(shí)現(xiàn)大文件的流式上傳,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • go與go mod命令使用方式以及遇到的問題

    go與go mod命令使用方式以及遇到的問題

    這篇文章主要介紹了go與go mod命令使用方式以及遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論

阳城县| 宜黄县| 九江县| 大竹县| 咸阳市| 青海省| 台山市| 崇义县| 晋城| 通化市| 花莲市| 黄陵县| 若尔盖县| 胶州市| 中超| 遂宁市| 珲春市| 贵南县| 怀宁县| 革吉县| 汕头市| 家居| 长葛市| 福海县| 桐乡市| 年辖:市辖区| 重庆市| 东乌| 广德县| 长武县| 镇沅| 东至县| 蕉岭县| 玉屏| 万荣县| 宁化县| 桃江县| 仁布县| 墨玉县| 乌兰察布市| 蒲江县|