加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang学习之net包详解

发布时间:2020-12-16 18:05:03 所属栏目:大数据 来源:网络整理
导读:/** * Created by Administrator on 13-12-9. */ package main import ( "fmt" "os" "net" ) /** * 将string类型的ip地址转换为IP对象 */ func main() { name := "192.168.1.97" ip := net.ParseIP(name) if ip == nil { fmt.Fprintf(os.Stderr, "Err:无效的
/** * Created by Administrator on 13-12-9. */
package main

import (
    "fmt"
    "os"
    "net"
)

/** * 将string类型的ip地址转换为IP对象 */
func main() {

    name := "192.168.1.97"

    ip := net.ParseIP(name)

    if ip == nil {
        fmt.Fprintf(os.Stderr,"Err:无效的地址")
        return
    }

    fmt.Fprintf(os.Stdout,"IP: %s %sn",ip,ip.String())
    defaultMask := ip.DefaultMask()
    fmt.Fprintf(os.Stdout,"DefaultMask: %s %sn",defaultMask,defaultMask.String())

    ones,bits := defaultMask.Size()
    fmt.Fprintf(os.Stdout,"ones: %d bits: %dn",ones,bits)
}
/** * Created by Administrator on 13-12-9. */
package main

import (
    "net"
    "fmt"
    "os"
)

/** * 根据IP和掩码获得网络 */
func main() {
    name := "192.168.1.97"

    ip := net.ParseIP(name)

    mask := ip.DefaultMask()

    network := ip.Mask(mask)

    fmt.Fprintf(os.Stdout,"network: %s",network.String()) // 192.168.1.0

    // ip: 192.168.1.97
    // mask: 255.255.255.0
    // network: 192.168.1.0
}
/** * Created by Administrator on 13-12-9. */
package main

import (
    "net"
    "fmt"
    "os"
)

/** * 将域名解析Ip地址 * 获得域名对应的所有Ip地址 */
func main() {

    domain := "www.baidu.com"
    ipAddr,err := net.ResolveIPAddr("ip",domain)
    if err != nil {
        fmt.Fprintf(os.Stderr,"Err: %s",err.Error())
        return
    }
    fmt.Fprintf(os.Stdout,"%s IP: %s Network: %s Zone: %sn",ipAddr.String(),ipAddr.IP,ipAddr.Network(),ipAddr.Zone)

    // 百度,虽然只有一个域名,但实际上,他对应电信,网通,联通等又有多个IP地址
    ns,err := net.LookupHost(domain)
    if err != nil {
        fmt.Fprintf(os.Stderr,err.Error())
        return
    }

    for _,n := range ns {
        fmt.Fprintf(os.Stdout,"%s",n) // 115.239.210.26 115.239.210.27 这2个地址打开都是百度
    }
}
/** * Created by Administrator on 13-12-9. */
package main

import (
    "net"
    "fmt"
    "os"
)

/** * 查看主机服务器(service)占用的端口,这些服务,都是tcp或者udp的 */
func main() {

    port,err := net.LookupPort("tcp","telnet") // 查看telnet服务器使用的端口

    if err != nil {
        fmt.Fprintf(os.Stderr,"未找到指定服务")
        return
    }

    fmt.Fprintf(os.Stdout,"telnet port: %d",port)

}
/** * Created by Administrator on 13-12-9. */
package main

import (
    "net"
    "fmt"
    "os"
)

func main() {

    // TCPAddr 包涵IP 和 Port

    // 将一个host地址转换为TCPAddr。host=ip:port
    pTCPAddr,err := net.ResolveTCPAddr("tcp","www.baidu.com:80")
    if err != nil {
        fmt.Fprintf(os.Stderr,err.Error())
        return
    }

    fmt.Fprintf(os.Stdout,"www.baidu.com:80 IP: %s PORT: %d",pTCPAddr.IP.String(),pTCPAddr.Port)
}
/** * Created by Administrator on 13-12-10. */
package main

import (
    "net"
    "fmt"
    "os"
    "io/ioutil"
)

func main() {

    url := "www.baidu.com:80"

    pRemoteTCPAddr,err := net.ResolveTCPAddr("tcp4",url)

    if err != nil {
        fmt.Fprintf(os.Stderr,"Error: %s",err.Error())
        return
    }

    // pLocalTCPAddr,err := net.ResolveTCPAddr("tcp","127.0.0.1:7070")

    pTCPConn,err := net.DialTCP("tcp",nil/*pLocalTCPAddr*/,pRemoteTCPAddr)

    if err != nil {
        fmt.Fprintf(os.Stderr,err.Error())
        return
    }


    n,err := pTCPConn.Write([]byte("HEAD / HTTP/1.0rnrn"))
    if err != nil {
        fmt.Fprintf(os.Stderr,err.Error())
        return
    }
    defer pTCPConn.Close()

    fmt.Fprintf(os.Stdout,"writed: %dn",n)

    buf,err := ioutil.ReadAll(pTCPConn)
    r := len(buf)
    fmt.Fprintf(os.Stdout,string(buf[:r]))
    fmt.Fprintf(os.Stdout,"readed: %dn",r)

}
/**
 * Created by Administrator on 13-12-10.
 */
package main

import (
    "net"
    "fmt"
    "os"
    "time"
)

func main() {

    pTCPAddr,error := net.ResolveTCPAddr("tcp4",":7070")
    if error != nil {
        fmt.Fprintf(os.Stdout,error.Error())
        return
    }
    pTCPListener,error := net.ListenTCP("tcp4",pTCPAddr)
    if error != nil {
        fmt.Fprintf(os.Stdout,error.Error())
        return
    }
    defer pTCPListener.Close()

    for {
        pTCPConn,error := pTCPListener.AcceptTCP()
        if error != nil {
            fmt.Fprintf(os.Stdout,error.Error())
            continue
        }
        go connHandler(pTCPConn)
    }
}

func connHandler(conn *net.TCPConn) {
    defer conn.Close()
    now := time.Now()
    conn.Write([]byte(now.String() + "n"))
}
/**
 * Created by Administrator on 13-12-10.
 */
package main

import (
    "net"
    "fmt"
    "os"
    "time"
)

func main() {

    //url := "baidu.com:80"
    url := "facebook.com:80"
    conn,error := net.DialTimeout("tcp",url,time.Second * 10) // 带有超时限制的conn
    if error != nil {
        fmt.Fprintf(os.Stderr,error.Error())
        return
    }

    n,error := conn.Write([]byte("HEAD / HTTP/1.0rnrn"))
    if error != nil {
        fmt.Fprintf(os.Stderr,error.Error())
        return
    }

    fmt.Fprintf(os.Stdout,"writed: %d",n)

    buf := make([]byte,2048)
    n,error = conn.Read(buf)
    if error != nil {
        fmt.Fprintf(os.Stderr,string(buf[:n]))
}
/** * Created by Administrator on 13-12-10. */
package main

import (
    "net"
    "fmt"
    "os"
)

/** * UDP 服务器 */
func main() {
    pUDPAddr,err := net.ResolveUDPAddr("udp",":7070")

    if err != nil {
        fmt.Fprintf(os.Stderr,err.Error())
        return
    }

    pUDPConn,err := net.ListenUDP("udp",pUDPAddr)

    if err != nil {
        fmt.Fprintf(os.Stderr,err.Error())
        return
    }

    defer pUDPConn.Close()

    for {

        buf := make([]byte,256)
        n,pUDPAddr,err := pUDPConn.ReadFromUDP(buf)

        if err != nil {
            fmt.Fprintf(os.Stderr,err.Error())
            return
        }
        fmt.Fprintf(os.Stdout,"readed: %d",n)

        n,err = pUDPConn.WriteToUDP(buf,pUDPAddr)
        if err != nil {
            fmt.Fprintf(os.Stderr,n)
    }
}
/** * Created by Administrator on 13-12-10. */
package main

import (
    "net"
    "fmt"
    "os"
)

/** * UDP 客户端 */
func main() {

    pUDPAddr,"127.0.0.1:7070")

    if err != nil {
        fmt.Fprintf(os.Stderr,"Error ResolveUDPAddr: %s",err := net.DialUDP("udp",nil,"Error DialUDP: %s",err.Error())
        return
    }

    n,err := pUDPConn.Write([]byte("你好啊!!!"))

    if err != nil {
        fmt.Fprintf(os.Stderr,"Error WriteToUDP: %s",n)

    buf := make([]byte,1024)
    n,_,err = pUDPConn.ReadFromUDP(buf)

    if err != nil {
        fmt.Fprintf(os.Stderr,"Error ReadFromUDP: %s","readed: %d %s",n,string(buf[:n]))
}
/** * Created by Administrator on 13-12-10. */
package main

import (
    "net"
    "fmt"
    "os"
)

/* 很多时候,服务器会处理多个端口的监听!可以使用select轮询处理这种情况 */
func main() {

    lsr,err := net.Listen("tcp",err.Error())
        return
    }

    for {
        conn,err := lsr.Accept()
        if err != nil {
            fmt.Fprintf(os.Stderr,err.Error())
            continue
        }

        go connHandler(conn)

    }

    fmt.Println("Done !")
}

func connHandler(conn net.Conn) {
    defer conn.Close()

    var buf[512]byte
    for {
        n,err := conn.Read(buf[0:])
        if err != nil {
            fmt.Fprintf(os.Stderr,err.Error())
            return
        }
        _,err = conn.Write(buf[0:n])
        if err != nil {
            fmt.Fprintf(os.Stderr,err.Error())
            return
        }
    }
}
/** * Created by Administrator on 13-12-10. */
package main

import (
    "net"
    "fmt"
    "os"
    "bufio"
)

func main() {

    conn,err := net.Dial("tcp","192.168.1.97:7070")
    if err != nil {
        fmt.Sprint(os.Stderr,err.Error())
        return
    }


    go func() {
        var buf [512]byte
        for {
            n,err := conn.Read(buf[0:])
            if err != nil {
                fmt.Fprintf(os.Stderr,err.Error())
                return
            }
            fmt.Fprintf(os.Stdout,string(buf[0:n]))
        }

    }()

    for {
        fmt.Fprintf(os.Stdout,"n输入:")
        pReader := bufio.NewReader(os.Stdin)
        line,err := pReader.ReadLine()
        if err != nil {
            fmt.Fprintf(os.Stderr,err.Error())
            return
        }
        conn.Write(line[0:])
    }
}
/** * Created by Administrator on 13-12-10. */
package main

import (
    "net"
    "fmt"
    "os"
)

/** UDP Server */
func main() {

    packetConn,err := net.ListenPacket("udp",":7070")

    if err != nil {
        fmt.Fprintf(os.Stdout,err.Error())
        return
    }
    defer packetConn.Close()

    var buf [512]byte
    for {
        n,addr,err := packetConn.ReadFrom(buf[0:])
        if err != nil {
            fmt.Fprintf(os.Stdout,err.Error())
            return
        }

        fmt.Fprintf(os.Stdout,"recv: %s",string(buf[0:n]))

        _,err = packetConn.WriteTo(buf[0:n],addr)
        if err != nil {
            fmt.Fprintf(os.Stdout,err.Error())
            return
        }
    }


}
/** * Created by Administrator on 13-12-10. */
package main

import (
    "net"
    "fmt"
    "os"
    "time"
)

/** UDP Client */
func main() {
    conn,err := net.Dial("udp","127.0.0.1:7070")

    if err != nil {
        fmt.Fprintf(os.Stdout,err.Error())
        return
    }

    defer conn.Close()


    _,err = conn.Write([]byte("你好啊UDP"))
    if err != nil {
        fmt.Fprintf(os.Stdout,err.Error())
        return
    }

    var buf [512]byte
    conn.SetReadDeadline(time.Now().Add(time.Second * 1))  // 阻塞,直到接收到消息,设置阻塞时间1秒
    n,err := conn.Read(buf[0:])
    if err != nil {
        fmt.Fprintf(os.Stdout,string(buf[0:n]))

}

转自:http://blog.csdn.net/eclipser1987/article/details/17247519?hmsr=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读