# Golang Socket 编程

By [Robin](https://paragraph.com/@robin-8) · 2023-05-04

---

Server端
=======

    package main
    
    import (
        "fmt"
        "net"
    )
    
    func main() {
        listener, err := net.Listen("tcp", "127.0.0.1:8080")
        if err != nil {
            fmt.Println("Error listening:", err.Error())
            return
        }
        defer listener.Close()
    
        fmt.Println("Listening on 127.0.0.1:8080")
    
        for {
            conn, err := listener.Accept()
            if err != nil {
                fmt.Println("Error accepting:", err.Error())
                return
            }
            defer conn.Close()
    
            go processWorker(conn)
        }
    }
    
    func processWorker(conn net.Conn) {
        for {
            buf := make([]byte, 1024)
            n, err := conn.Read(buf)
            if err != nil {
                fmt.Println("Error reading:", err.Error())
                return
            }
            fmt.Printf("Received message:%s", string(buf[:n]))
        }
    }
    

_服务端通过for循环_listener.Accept去\*处理不同的客户端链接；\*processWorker通过for循环去处理每一个客户端的请求；

Client端
=======

    package main
    
    import (
        "bufio"
        "fmt"
        "net"
        "os"
    )
    
    func main() {
        conn, err := net.Dial("tcp", "127.0.0.1:8080")
        if err != nil {
            fmt.Println("Error connecting:", err.Error())
            return
        }
        defer conn.Close()
    
        for {
            reader := bufio.NewReader(os.Stdin)
            fmt.Print("请输入您想输入的内容：")
            message, _ := reader.ReadString('\n')
            _, err = conn.Write([]byte(message)) // 发送数据
            if err != nil {
                fmt.Println("Error Sending data:", err.Error())
            }
        }
    }
    

_客户端通过_bufio.NewReader(os.Stdin)获取标准输入，并将标准输入内容写入到远端server

---

*Originally published on [Robin](https://paragraph.com/@robin-8/golang-socket)*
