In Go, use the standard librarynet
to 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 languagenet
Packages 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!