view src/ut/nw/nw.go @ 38:05bdd37e3000

add channel-sample.
author pyon@macmini
date Sat, 11 Jan 2020 17:00:30 +0900
parents 5345d67aea5a
children
line wrap: on
line source

/*
    little network library.
*/
package nw

import (
    "io"
    "log"
    "net"
    "os"
)

/* nc: done. */
func Netcat( server, port string ) {
    conn, err := net.Dial( "tcp", net.JoinHostPort( server, port ) )
    if err != nil {
        log.Fatal( err )
    }
    defer conn.Close()
    go mustCopy( os.Stdout, conn )
    mustCopy( conn, os.Stdin )
}

func mustCopy( dst io.Writer, src io.Reader ) {
    if _, err := io.Copy( dst, src ); err != nil {
        log.Fatal( err )
    }
}

/* nc -l: done. */
func Netcat_l( port string ) {
    addr := GetLocalIP()
    l, err := net.Listen( "tcp", net.JoinHostPort( addr, port ) )
    if err != nil {
        log.Fatal( err )
    }
    defer l.Close()

    conn, err := l.Accept()
    if err != nil {
        log.Fatal( err )
    }
    io.Copy( os.Stdout, conn )
    conn.Close()
}

/* done. */
func GetLocalIP() string {
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        log.Fatal( err )
    }
    for _, addr := range addrs {
        if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
            if ipnet.IP.To4() != nil {
                return ipnet.IP.String()
            }
        }
    }
    return "127.0.0.1"
}