SoFunction
Updated on 2025-03-03

Golang socket implementation

In Go, use the standard librarynetto implement socket programming. Here are basic concepts and examples about Go sockets.

1. Basic concepts

  • Network Type
    • TCP: Stream sockets that provide reliable, connection-oriented communication.
    • UDP: Datagram socket, no connection, suitable for fast transmission.

2. TCP socket example

Server-side code

package main

import (
    "fmt"
    "net"
)

func main() {
    // Create TCP socket    listener, err := ("tcp", ":12345")
    if err != nil {
        ("Error starting server:", err)
        return
    }
    defer ()

    ("Waiting for a connection...")
    for {
        // Accept connection        conn, err := ()
        if err != nil {
            ("Error accepting connection:", err)
            continue
        }
        ("Connection established from", ())

        // Handle connection        go handleConnection(conn)
    }
}

func handleConnection(conn ) {
    defer ()
    message := "Hello, Client!"
    ([]byte(message))
    ("Message sent to client:", message)
}

Client Code

package main

import (
    "fmt"
    "net"
)

func main() {
    // Connect to the server    conn, err := ("tcp", "localhost:12345")
    if err != nil {
        ("Error connecting to server:", err)
        return
    }
    defer ()

    // Receive data    buffer := make([]byte, 1024)
    n, err := (buffer)
    if err != nil {
        ("Error reading from server:", err)
        return
    }

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

3. UDP socket example

Server-side code

package main

import (
    "fmt"
    "net"
)

func main() {
    // Create UDP socket    address, err := ("udp", ":12345")
    if err != nil {
        ("Error resolving address:", err)
        return
    }

    conn, err := ("udp", address)
    if err != nil {
        ("Error listening:", err)
        return
    }
    defer ()

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

        // Send a response        response := []byte("Hello, UDP Client!")
        (response, addr)
    }
}

Client Code

package main

import (
    "fmt"
    "net"
)

func main() {
    // Send UDP packets    address, err := ("udp", "localhost:12345")
    if err != nil {
        ("Error resolving address:", err)
        return
    }

    conn, err := ("udp", nil, address)
    if err != nil {
        ("Error connecting:", err)
        return
    }
    defer ()

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

    // Receive response    buffer := make([]byte, 1024)
    n, _, err := (buffer)
    if err != nil {
        ("Error reading from server:", err)
        return
    }

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

4. Running example

  • First run the server code in a terminal.
  • Then run the client code in another terminal.

Summarize

Go languagenetPackages make socket programming simple and efficient. By using TCP or UDP sockets, you can easily achieve network communication.

This is the end of this article about the implementation of golang sockets. For more related golang socket content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!