net包

来源:互联网 发布:网络职业有哪些 编辑:程序博客网 时间:2024/05/10 07:05
  1. **  
  2.  * Created by Administrator on 13-12-9.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "fmt"  
  8.     "os"  
  9.     "net"  
  10. )  
  11.   
  12. /**  
  13.  * 将string类型的ip地址转换为IP对象  
  14.  */  
  15. func main() {  
  16.   
  17.     name := "192.168.1.97"  
  18.   
  19.     ip := net.ParseIP(name)  
  20.   
  21.     if ip == nil {  
  22.         fmt.Fprintf(os.Stderr, "Err:无效的地址")  
  23.         return  
  24.     }  
  25.   
  26.     fmt.Fprintf(os.Stdout, "IP: %s %s\n", ip, ip.String())  
  27.     defaultMask := ip.DefaultMask()  
  28.     fmt.Fprintf(os.Stdout, "DefaultMask: %s %s\n", defaultMask, defaultMask.String())  
  29.   
  30.     ones, bits := defaultMask.Size()  
  31.     fmt.Fprintf(os.Stdout, "ones: %d bits: %d\n", ones, bits)  
  32. }  




[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-9.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10. )  
  11.   
  12. /**  
  13.  * 根据IP和掩码获得网络  
  14.  */  
  15. func main() {  
  16.     name := "192.168.1.97"  
  17.   
  18.     ip := net.ParseIP(name)  
  19.   
  20.     mask := ip.DefaultMask()  
  21.   
  22.     network := ip.Mask(mask)  
  23.   
  24.     fmt.Fprintf(os.Stdout, "network: %s", network.String()) // 192.168.1.0  
  25.   
  26.     // ip:      192.168.1.97  
  27.     // mask:    255.255.255.0  
  28.     // network: 192.168.1.0  
  29. }  




[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-9.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10. )  
  11.   
  12. /**  
  13.  * 将域名解析Ip地址  
  14.  * 获得域名对应的所有Ip地址  
  15.  */  
  16. func main() {  
  17.   
  18.     domain := "www.baidu.com"  
  19.     ipAddr, err := net.ResolveIPAddr("ip", domain)  
  20.     if err != nil {  
  21.         fmt.Fprintf(os.Stderr, "Err: %s", err.Error())  
  22.         return  
  23.     }  
  24.     fmt.Fprintf(os.Stdout, "%s IP: %s Network: %s Zone: %s\n", ipAddr.String(), ipAddr.IP, ipAddr.Network(), ipAddr.Zone)  
  25.   
  26.     // 百度,虽然只有一个域名,但实际上,他对应电信,网通,联通等又有多个IP地址  
  27.     ns, err := net.LookupHost(domain)  
  28.     if err != nil {  
  29.         fmt.Fprintf(os.Stderr, "Err: %s", err.Error())  
  30.         return  
  31.     }  
  32.   
  33.     for _, n := range ns {  
  34.         fmt.Fprintf(os.Stdout, "%s", n) // 115.239.210.26    115.239.210.27 这2个地址打开都是百度  
  35.     }  
  36. }  



[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-9.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10. )  
  11.   
  12. /**  
  13.  * 查看主机服务器(service)占用的端口,这些服务,都是tcp或者udp的  
  14.  */  
  15. func main() {  
  16.   
  17.     port, err := net.LookupPort("tcp", "telnet") // 查看telnet服务器使用的端口  
  18.   
  19.     if err != nil {  
  20.         fmt.Fprintf(os.Stderr, "未找到指定服务")  
  21.         return  
  22.     }  
  23.   
  24.     fmt.Fprintf(os.Stdout, "telnet port: %d", port)  
  25.   
  26. }  



[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-9.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10. )  
  11.   
  12. func main() {  
  13.   
  14.     // TCPAddr 包涵IP 和 Port  
  15.   
  16.     // 将一个host地址转换为TCPAddr。host=ip:port  
  17.     pTCPAddr, err := net.ResolveTCPAddr("tcp", "www.baidu.com:80")  
  18.     if err != nil {  
  19.         fmt.Fprintf(os.Stderr, "Err: %s", err.Error())  
  20.         return  
  21.     }  
  22.   
  23.     fmt.Fprintf(os.Stdout, "www.baidu.com:80 IP: %s PORT: %d", pTCPAddr.IP.String(), pTCPAddr.Port)  
  24. }  



[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-10.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10.     "io/ioutil"  
  11. )  
  12.   
  13. func main() {  
  14.   
  15.     url := "www.baidu.com:80"  
  16.   
  17.     pRemoteTCPAddr, err := net.ResolveTCPAddr("tcp4", url)  
  18.   
  19.     if err != nil {  
  20.         fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  21.         return  
  22.     }  
  23.   
  24.     // pLocalTCPAddr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:7070")  
  25.   
  26.     pTCPConn, err := net.DialTCP("tcp", nil/*pLocalTCPAddr*/, pRemoteTCPAddr)  
  27.   
  28.     if err != nil {  
  29.         fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  30.         return  
  31.     }  
  32.   
  33.   
  34.     n, err := pTCPConn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))  
  35.     if err != nil {  
  36.         fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  37.         return  
  38.     }  
  39.     defer pTCPConn.Close()  
  40.   
  41.     fmt.Fprintf(os.Stdout, "writed: %d\n", n)  
  42.   
  43.     buf, err := ioutil.ReadAll(pTCPConn)  
  44.     r := len(buf)  
  45.     fmt.Fprintf(os.Stdout, string(buf[:r]))  
  46.     fmt.Fprintf(os.Stdout, "readed: %d\n", r)  
  47.   
  48. }  



[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-10.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10.     "time"  
  11. )  
  12.   
  13. func main() {  
  14.   
  15.     pTCPAddr, error := net.ResolveTCPAddr("tcp4", ":7070")  
  16.     if error != nil {  
  17.         fmt.Fprintf(os.Stdout, "Error: %s", error.Error())  
  18.         return  
  19.     }  
  20.     pTCPListener, error := net.ListenTCP("tcp4", pTCPAddr)  
  21.     if error != nil {  
  22.         fmt.Fprintf(os.Stdout, "Error: %s", error.Error())  
  23.         return  
  24.     }  
  25.     defer pTCPListener.Close()  
  26.   
  27.     for {  
  28.         pTCPConn, error := pTCPListener.AcceptTCP()  
  29.         if error != nil {  
  30.             fmt.Fprintf(os.Stdout, "Error: %s", error.Error())  
  31.             continue  
  32.         }  
  33.         go connHandler(pTCPConn)  
  34.     }  
  35. }  
  36.   
  37. func connHandler(conn *net.TCPConn) {  
  38.     defer conn.Close()  
  39.     now := time.Now()  
  40.     conn.Write([]byte(now.String() + "\n"))  
  41. }  



[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-10.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10.     "time"  
  11. )  
  12.   
  13. func main() {  
  14.   
  15.     //url := "baidu.com:80"  
  16.     url := "facebook.com:80"  
  17.     conn, error := net.DialTimeout("tcp", url, time.Second * 10) // 带有超时限制的conn  
  18.     if error != nil {  
  19.         fmt.Fprintf(os.Stderr, "Error: %s", error.Error())  
  20.         return  
  21.     }  
  22.   
  23.     n , error := conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))  
  24.     if error != nil {  
  25.         fmt.Fprintf(os.Stderr, "Error: %s", error.Error())  
  26.         return  
  27.     }  
  28.   
  29.     fmt.Fprintf(os.Stdout, "writed: %d", n)  
  30.   
  31.     buf := make([]byte, 2048)  
  32.     n, error = conn.Read(buf)  
  33.     if error != nil {  
  34.         fmt.Fprintf(os.Stderr, "Error: %s", error.Error())  
  35.         return  
  36.     }  
  37.   
  38.     fmt.Fprintf(os.Stdout, string(buf[:n]))  
  39. }  




[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-10.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10. )  
  11.   
  12. /**  
  13.  * UDP 服务器  
  14.  */  
  15. func main() {  
  16.     pUDPAddr, err := net.ResolveUDPAddr("udp", ":7070")  
  17.   
  18.     if err != nil {  
  19.         fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  20.         return  
  21.     }  
  22.   
  23.     pUDPConn, err := net.ListenUDP("udp", pUDPAddr)  
  24.   
  25.     if err != nil {  
  26.         fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  27.         return  
  28.     }  
  29.   
  30.     defer pUDPConn.Close()  
  31.   
  32.     for {  
  33.   
  34.         buf := make([]byte, 256)  
  35.         n , pUDPAddr, err := pUDPConn.ReadFromUDP(buf)  
  36.   
  37.         if err != nil {  
  38.             fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  39.             return  
  40.         }  
  41.         fmt.Fprintf(os.Stdout, "readed: %d", n)  
  42.   
  43.         n, err = pUDPConn.WriteToUDP(buf, pUDPAddr)  
  44.         if err != nil {  
  45.             fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  46.             return  
  47.         }  
  48.         fmt.Fprintf(os.Stdout, "writed: %d", n)  
  49.     }  
  50. }  



[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-10.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10. )  
  11.   
  12. /**  
  13.  * UDP 客户端  
  14.  */  
  15. func main() {  
  16.   
  17.     pUDPAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:7070")  
  18.   
  19.     if err != nil {  
  20.         fmt.Fprintf(os.Stderr, "Error ResolveUDPAddr: %s", err.Error())  
  21.         return  
  22.     }  
  23.   
  24.     pUDPConn, err := net.DialUDP("udp", nil, pUDPAddr)  
  25.   
  26.     if err != nil {  
  27.         fmt.Fprintf(os.Stderr, "Error DialUDP: %s", err.Error())  
  28.         return  
  29.     }  
  30.   
  31.     n, err := pUDPConn.Write([]byte("你好啊!!!"))  
  32.   
  33.     if err != nil {  
  34.         fmt.Fprintf(os.Stderr, "Error WriteToUDP: %s", err.Error())  
  35.         return  
  36.     }  
  37.   
  38.     fmt.Fprintf(os.Stdout, "writed: %d", n)  
  39.   
  40.     buf := make([]byte, 1024)  
  41.     n, _, err = pUDPConn.ReadFromUDP(buf)  
  42.   
  43.     if err != nil {  
  44.         fmt.Fprintf(os.Stderr, "Error ReadFromUDP: %s", err.Error())  
  45.         return  
  46.     }  
  47.   
  48.     fmt.Fprintf(os.Stdout, "readed: %d  %s", n, string(buf[:n]))  
  49. }  




[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-10.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10. )  
  11.   
  12. /*  
  13. 很多时候,服务器会处理多个端口的监听!可以使用select轮询处理这种情况  
  14.   
  15.  */  
  16. func main() {  
  17.   
  18.     lsr, err := net.Listen("tcp", ":7070")  
  19.   
  20.     if err != nil {  
  21.         fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  22.         return  
  23.     }  
  24.   
  25.     for {  
  26.         conn , err := lsr.Accept()  
  27.         if err != nil {  
  28.             fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  29.             continue  
  30.         }  
  31.   
  32.         go connHandler(conn)  
  33.   
  34.     }  
  35.   
  36.     fmt.Println("Done !")  
  37. }  
  38.   
  39. func connHandler(conn net.Conn) {  
  40.     defer conn.Close()  
  41.   
  42.     var buf[512]byte  
  43.     for {  
  44.         n , err := conn.Read(buf[0:])  
  45.         if err != nil {  
  46.             fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  47.             return  
  48.         }  
  49.         _, err = conn.Write(buf[0:n])  
  50.         if err != nil {  
  51.             fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  52.             return  
  53.         }  
  54.     }  
  55. }  




[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-10.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10.     "bufio"  
  11. )  
  12.   
  13. func main() {  
  14.   
  15.     conn, err := net.Dial("tcp", "192.168.1.97:7070")  
  16.     if err != nil {  
  17.         fmt.Sprint(os.Stderr, "Error: %s", err.Error())  
  18.         return  
  19.     }  
  20.   
  21.   
  22.     go func() {  
  23.         var buf [512]byte  
  24.         for {  
  25.             n , err := conn.Read(buf[0:])  
  26.             if err != nil {  
  27.                 fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  28.                 return  
  29.             }  
  30.             fmt.Fprintf(os.Stdout, string(buf[0:n]))  
  31.         }  
  32.   
  33.     }()  
  34.   
  35.     for {  
  36.         fmt.Fprintf(os.Stdout, "\n输入:")  
  37.         pReader := bufio.NewReader(os.Stdin)  
  38.         line, _, err := pReader.ReadLine()  
  39.         if err != nil {  
  40.             fmt.Fprintf(os.Stderr, "Error: %s", err.Error())  
  41.             return  
  42.         }  
  43.         conn.Write(line[0:])  
  44.     }  
  45. }  



[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-10.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10. )  
  11.   
  12. /**  
  13.  UDP Server  
  14.  */  
  15. func main() {  
  16.   
  17.     packetConn, err := net.ListenPacket("udp", ":7070")  
  18.   
  19.     if err != nil {  
  20.         fmt.Fprintf(os.Stdout, "Error: %s", err.Error())  
  21.         return  
  22.     }  
  23.     defer packetConn.Close()  
  24.   
  25.     var buf [512]byte  
  26.     for {  
  27.         n , addr, err := packetConn.ReadFrom(buf[0:])  
  28.         if err != nil {  
  29.             fmt.Fprintf(os.Stdout, "Error: %s", err.Error())  
  30.             return  
  31.         }  
  32.   
  33.         fmt.Fprintf(os.Stdout, "recv: %s", string(buf[0:n]))  
  34.   
  35.         _, err = packetConn.WriteTo(buf[0:n], addr)  
  36.         if err != nil {  
  37.             fmt.Fprintf(os.Stdout, "Error: %s", err.Error())  
  38.             return  
  39.         }  
  40.     }  
  41.   
  42.   
  43. }  




[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * Created by Administrator on 13-12-10.  
  3.  */  
  4. package main  
  5.   
  6. import (  
  7.     "net"  
  8.     "fmt"  
  9.     "os"  
  10.     "time"  
  11. )  
  12.   
  13. /**  
  14.  UDP Client  
  15.  */  
  16. func main() {  
  17.     conn, err := net.Dial("udp", "127.0.0.1:7070")  
  18.   
  19.     if err != nil {  
  20.         fmt.Fprintf(os.Stdout, "Error: %s", err.Error())  
  21.         return  
  22.     }  
  23.   
  24.     defer conn.Close()  
  25.   
  26.   
  27.     _, err = conn.Write([]byte("你好啊UDP"))  
  28.     if err != nil {  
  29.         fmt.Fprintf(os.Stdout, "Error: %s", err.Error())  
  30.         return  
  31.     }  
  32.   
  33.     var buf [512]byte  
  34.     conn.SetReadDeadline(time.Now().Add(time.Second * 1))  // 阻塞,直到接收到消息,设置阻塞时间1秒  
  35.     n, err := conn.Read(buf[0:])  
  36.     if err != nil {  
  37.         fmt.Fprintf(os.Stdout, "Error: %s", err.Error())  
  38.         return  
  39.     }  
  40.   
  41.     fmt.Fprintf(os.Stdout, "recv: %s", string(buf[0:n]))  
  42.   
  43. }  

0 0
原创粉丝点击