zoukankan      html  css  js  c++  java
  • Go语言TCP/UDP Socket编程

    1. TCP编程

    TCPClient

    // TCPClient project main.go
    package main
    
    import (
        "fmt"
        "net"
        "os"
    )
    
    func main() {
        var buf [512]byte
        if len(os.Args) != 2 {
            fmt.Fprintf(os.Stderr, "Usage: %s host:port ", os.Args[0])
            os.Exit(1)
        }
        service := os.Args[1]
        tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
        checkErr(err)
        conn, err := net.DialTCP("tcp", nil, tcpAddr)
        defer conn.Close()
        checkErr(err)
        rAddr := conn.RemoteAddr()
        n, err := conn.Write([]byte("Hello server!"))
        checkErr(err)
        n, err = conn.Read(buf[0:])
        checkErr(err)
        fmt.Println("Reply from server ", rAddr.String(), string(buf[0:n]))
        os.Exit(0)
    }
    
    func checkErr(err error) {
        if err != nil {
            fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
            os.Exit(1)
        }
    }

    TCPServer

    // TCPServer project main.go
    package main
    
    import (
        "fmt"
        "net"
        "os"
    )
    
    func main() {
        service := ":5000"
        tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
        checkErr(err)
        listener, err := net.ListenTCP("tcp", tcpAddr)
        checkErr(err)
        for {
            conn, err := listener.Accept()
            if err != nil {
                continue
            }
            go handleClient(conn)
        }
    }
    
    func checkErr(err error) {
        if err != nil {
            fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
            os.Exit(1)
        }
    }
    
    func handleClient(conn net.Conn) {
        defer conn.Close()
        var buf [512]byte
        for {
            n, err := conn.Read(buf[0:])
            if err != nil {
                return
            }
            rAddr := conn.RemoteAddr()
            fmt.Println("Receive from client", rAddr.String(), string(buf[0:n]))
            _, err2 := conn.Write([]byte("Welcome client!"))
            if err2 != nil {
                return
            }
        }
    }

    2. UDP编程

    UPDClient

    // UDPClient project main.go
    package main
    
    import (
        "fmt"
        "net"
        "os"
    )
    
    func main() {
        var buf [512]byte
        if len(os.Args) != 2 {
            fmt.Fprintf(os.Stderr, "Usage: %s host:port ", os.Args[0])
            os.Exit(1)
        }
        service := os.Args[1]
        udpAddr, err := net.ResolveUDPAddr("udp4", service)
        checkErr(err)
        conn, err := net.DialUDP("udp", nil, udpAddr)
        defer conn.Close()
        checkErr(err)
        rAddr := conn.RemoteAddr()
        n, err := conn.Write([]byte("Hello server!"))
        checkErr(err)
        n, err = conn.Read(buf[0:])
        checkErr(err)
        fmt.Println("Reply from server ", rAddr.String(), string(buf[0:n]))
        os.Exit(0)
    }
    
    func checkErr(err error) {
        if err != nil {
            fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
            os.Exit(1)
        }
    }

    UDPServer

    // UDPServer project main.go
    package main
    
    import (
        "fmt"
        "net"
        "os"
    )
    
    func main() {
        service := ":5000"
        udpAddr, err := net.ResolveUDPAddr("udp4", service)
        checkErr(err)
        conn, err := net.ListenUDP("udp", udpAddr)
        checkErr(err)
        for {
            handleClient(conn)
        }
    }
    
    func checkErr(err error) {
        if err != nil {
            fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
            os.Exit(1)
        }
    }
    
    func handleClient(conn *net.UDPConn) {
        defer conn.Close()
        var buf [512]byte
        for {
            n, rAddr, err := conn.ReadFromUDP(buf[0:])
            if err != nil {
                return
            }
            fmt.Println("Receive from client", rAddr.String(), string(buf[0:n]))
            _, err2 := conn.WriteToUDP([]byte("Welcome client!"), rAddr)
            if err2 != nil {
                return
            }
        }
    }
  • 相关阅读:
    [LeetCode 049] Group Anagrams
    [LeetCode 033] Search in Rotated Sorted Array
    [LeetCode 024] Swap Nodes in Pairs
    [LeetCode 016] 3Sum Closest
    [LeetCode 015] 3Sum
    [LeetCode 013] Roman to Integer
    [LeetCode 008] String to Integer (atoi)
    [LeetCode 007] Reverse Integer
    第四课:文件操作【解密】
    第三课:文件操作【逐步浅入,深入加解法】
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/6128290.html
Copyright © 2011-2022 走看看