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
            }
        }
    }
  • 相关阅读:
    Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
    安卓开发中非常炫的效果集合
    Android开源项目分类汇总
    Linux vim 底下显示行号
    backslash and newline separated by space
    LinuxC语言读取文件,分割字符串,存入链表,放入另一个文件
    Linux C 知识 char型数字转换为int型 int型 转换为Char
    Linux 底下使用C 对文件进行遍历
    Xshell 中文乱码
    Linux底下的第一个C程序
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/6128290.html
Copyright © 2011-2022 走看看