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

golang套接字的實現

 更新時間:2024年10月30日 09:41:17   作者:get200  
Go語言中通過標準庫net實現套接字編程,涵蓋了TCP和UDP兩種網絡類型,通過這些基本概念和實際代碼示例,可以幫助理解和掌握Go語言中的套接字編程

在 Go 語言中,使用標準庫 net 來實現套接字編程。以下是有關 Go 套接字的基本概念和示例。

1. 基本概念

  • 網絡類型
    • TCP:流套接字,提供可靠的、面向連接的通信。
    • UDP:數據報套接字,無連接,適用于快速傳輸。

2. TCP 套接字示例

服務器端代碼

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() {
    // 連接到服務器
    conn, err := net.Dial("tcp", "localhost:12345")
    if err != nil {
        fmt.Println("Error connecting to server:", err)
        return
    }
    defer conn.Close()

    // 接收數據
    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 套接字示例

服務器端代碼

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ā)送響應
        response := []byte("Hello, UDP Client!")
        conn.WriteToUDP(response, addr)
    }
}

客戶端代碼

package main

import (
    "fmt"
    "net"
)

func main() {
    // 發(fā)送 UDP 數據包
    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)

    // 接收響應
    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. 運行示例

  • 首先在一個終端中運行服務器代碼。
  • 然后在另一個終端中運行客戶端代碼。

總結

Go 語言的 net 包使得套接字編程變得簡單而高效。通過使用 TCP 或 UDP 套接字,你可以輕松實現網絡通信。

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

相關文章

  • Go函數使用(函數定義、函數聲明、函數調用等)

    Go函數使用(函數定義、函數聲明、函數調用等)

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

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

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

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

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

    Kubernetes上使用Jaeger分布式追蹤基礎設施詳解

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

    詳解Go語言中ErrGroup的使用

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

    Golang操作excel的技巧與方法

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

    Linux環(huán)境下編譯并運行go項目的全過程

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

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

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

    Go語言的互斥鎖的詳細使用

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

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

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

最新評論