欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1. 基本概念

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

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 語(yǔ)言的 net 包使得套接字編程變得簡(jiǎn)單而高效。通過使用 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函數(shù)使用(函數(shù)定義、函數(shù)聲明、函數(shù)調(diào)用等)

    Go函數(shù)使用(函數(shù)定義、函數(shù)聲明、函數(shù)調(diào)用等)

    本文主要介紹了Go函數(shù)使用,包括函數(shù)定義、函數(shù)聲明、函數(shù)調(diào)用、可變參數(shù)函數(shù)、匿名函數(shù)、遞歸函數(shù)、高階函數(shù)等,感興趣的可以了解一下
    2023-11-11
  • 深入探討Go語(yǔ)言中的預(yù)防性接口為什么是不必要的

    深入探討Go語(yǔ)言中的預(yù)防性接口為什么是不必要的

    在Go語(yǔ)言中,有一種從其他語(yǔ)言帶來(lái)的常見模式:預(yù)防性接口,雖然這種模式在?Java?等語(yǔ)言中很有價(jià)值,但在Go中往往會(huì)成為反模式,本文我們就來(lái)深入探討一下原因
    2025-01-01
  • Golang利用channel協(xié)調(diào)協(xié)程的方法詳解

    Golang利用channel協(xié)調(diào)協(xié)程的方法詳解

    go?當(dāng)中的并發(fā)編程是通過goroutine來(lái)實(shí)現(xiàn)的,利用channel(管道)可以在協(xié)程之間傳遞數(shù)據(jù),所以本文就來(lái)講講Golang如何利用channel協(xié)調(diào)協(xié)程吧
    2023-05-05
  • Kubernetes上使用Jaeger分布式追蹤基礎(chǔ)設(shè)施詳解

    Kubernetes上使用Jaeger分布式追蹤基礎(chǔ)設(shè)施詳解

    這篇文章主要為大家介紹了Kubernetes上使用Jaeger分布式追蹤基礎(chǔ)設(shè)施詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 詳解Go語(yǔ)言中ErrGroup的使用

    詳解Go語(yǔ)言中ErrGroup的使用

    本文主要為大家詳細(xì)介紹了Go語(yǔ)言中errGroup的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2023-07-07
  • Golang操作excel的技巧與方法

    Golang操作excel的技巧與方法

    在Golang中操作Excel可以包括讀取、寫入和編輯Excel文件,你可以定義函數(shù)或方法來(lái)執(zhí)行這些操作,本文給大家介紹了Golang操作excel的技巧與方法,文中有詳細(xì)的代碼講解,需要的朋友可以參考下
    2024-05-05
  • Linux環(huán)境下編譯并運(yùn)行g(shù)o項(xiàng)目的全過程

    Linux環(huán)境下編譯并運(yùn)行g(shù)o項(xiàng)目的全過程

    Go語(yǔ)言是Google的開源編程語(yǔ)言,廣泛應(yīng)用于云計(jì)算、分布式系統(tǒng)開發(fā)等領(lǐng)域,在Linux上也有大量的應(yīng)用場(chǎng)景,這篇文章主要給大家介紹了關(guān)于Linux環(huán)境下編譯并運(yùn)行g(shù)o項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Go語(yǔ)言到底有沒有引用傳參(對(duì)比 C++ )

    Go語(yǔ)言到底有沒有引用傳參(對(duì)比 C++ )

    這篇文章主要介紹了Go 到底有沒有引用傳參(對(duì)比 C++ ),需要的朋友可以參考下
    2017-09-09
  • Go語(yǔ)言的互斥鎖的詳細(xì)使用

    Go語(yǔ)言的互斥鎖的詳細(xì)使用

    本文主要介紹了Go語(yǔ)言的互斥鎖的詳細(xì)使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Golang的引用類型和指針的使用與區(qū)別

    Golang的引用類型和指針的使用與區(qū)別

    本文詳細(xì)介紹了Golang中的引用類型和指針的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02

最新評(píng)論