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
            }
        }
    }
  • 相关阅读:
    软阈值迭代算法(ISTA)和快速软阈值迭代算法(FISTA)
    伍德伯里矩阵恒等式(Woodbury matrix identity)
    压缩感知:一种新型亚采样技术
    运输层--------运输层与网络层的关系、UDP、TCP
    单链表的基本操作(二)
    单链表的基本操作(一)
    c++中的数据类型转换
    链表总的首元结点、头结点、头指针的区别
    封装设计基础知识点
    git的使用总结
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/6128290.html
Copyright © 2011-2022 走看看