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
            }
        }
    }
  • 相关阅读:
    Typora 使用 Markdown 嵌入 LaTeX 数学公式符号语法
    爬虫常用的 urllib 库知识点
    执行Go程序的三种方式及Go语言关键字
    Win10 安装 MongoDB 3.6.5 失败的问题
    笨办法理解动态规划算法
    EclipseEE的Web开发环境配置(使用Tomcat作为Web服务器)
    二分类神经网络公式推导过程
    B+树在磁盘存储中的应用
    JAVA NIO工作原理及代码示例
    B树和B+树的插入、删除图文详解
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/6128290.html
Copyright © 2011-2022 走看看