Golang学习之net包详解

前端之家收集整理的这篇文章主要介绍了Golang学习之net包详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. /** * Created by Administrator on 13-12-9. */
  2. package main
  3.  
  4. import (
  5. "fmt"
  6. "os"
  7. "net"
  8. )
  9.  
  10. /** * 将string类型的ip地址转换为IP对象 */
  11. func main() {
  12.  
  13. name := "192.168.1.97"
  14.  
  15. ip := net.ParseIP(name)
  16.  
  17. if ip == nil {
  18. fmt.Fprintf(os.Stderr,"Err:无效的地址")
  19. return
  20. }
  21.  
  22. fmt.Fprintf(os.Stdout,"IP: %s %s\n",ip,ip.String())
  23. defaultMask := ip.DefaultMask()
  24. fmt.Fprintf(os.Stdout,"DefaultMask: %s %s\n",defaultMask,defaultMask.String())
  25.  
  26. ones,bits := defaultMask.Size()
  27. fmt.Fprintf(os.Stdout,"ones: %d bits: %d\n",ones,bits)
  28. }
  1. /** * Created by Administrator on 13-12-9. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. )
  9.  
  10. /** * 根据IP和掩码获得网络 */
  11. func main() {
  12. name := "192.168.1.97"
  13.  
  14. ip := net.ParseIP(name)
  15.  
  16. mask := ip.DefaultMask()
  17.  
  18. network := ip.Mask(mask)
  19.  
  20. fmt.Fprintf(os.Stdout,"network: %s",network.String()) // 192.168.1.0
  21.  
  22. // ip: 192.168.1.97
  23. // mask: 255.255.255.0
  24. // network: 192.168.1.0
  25. }
  1. /** * Created by Administrator on 13-12-9. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. )
  9.  
  10. /** * 将域名解析Ip地址 * 获得域名对应的所有Ip地址 */
  11. func main() {
  12.  
  13. domain := "www.baidu.com"
  14. ipAddr,err := net.ResolveIPAddr("ip",domain)
  15. if err != nil {
  16. fmt.Fprintf(os.Stderr,"Err: %s",err.Error())
  17. return
  18. }
  19. fmt.Fprintf(os.Stdout,"%s IP: %s Network: %s Zone: %s\n",ipAddr.String(),ipAddr.IP,ipAddr.Network(),ipAddr.Zone)
  20.  
  21. // 百度,虽然只有一个域名,但实际上,他对应电信,网通,联通等又有多个IP地址
  22. ns,err := net.LookupHost(domain)
  23. if err != nil {
  24. fmt.Fprintf(os.Stderr,err.Error())
  25. return
  26. }
  27.  
  28. for _,n := range ns {
  29. fmt.Fprintf(os.Stdout,"%s",n) // 115.239.210.26 115.239.210.27 这2个地址打开都是百度
  30. }
  31. }
  1. /** * Created by Administrator on 13-12-9. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. )
  9.  
  10. /** * 查看主机服务器(service)占用的端口,这些服务,都是tcp或者udp的 */
  11. func main() {
  12.  
  13. port,err := net.LookupPort("tcp","telnet") // 查看telnet服务器使用的端口
  14.  
  15. if err != nil {
  16. fmt.Fprintf(os.Stderr,"未找到指定服务")
  17. return
  18. }
  19.  
  20. fmt.Fprintf(os.Stdout,"telnet port: %d",port)
  21.  
  22. }
  1. /** * Created by Administrator on 13-12-9. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. )
  9.  
  10. func main() {
  11.  
  12. // TCPAddr 包涵IP 和 Port
  13.  
  14. // 将一个host地址转换为TCPAddr。host=ip:port
  15. pTCPAddr,err := net.ResolveTCPAddr("tcp","www.baidu.com:80")
  16. if err != nil {
  17. fmt.Fprintf(os.Stderr,err.Error())
  18. return
  19. }
  20.  
  21. fmt.Fprintf(os.Stdout,"www.baidu.com:80 IP: %s PORT: %d",pTCPAddr.IP.String(),pTCPAddr.Port)
  22. }
  1. /** * Created by Administrator on 13-12-10. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. "io/IoUtil"
  9. )
  10.  
  11. func main() {
  12.  
  13. url := "www.baidu.com:80"
  14.  
  15. pRemoteTCPAddr,err := net.ResolveTCPAddr("tcp4",url)
  16.  
  17. if err != nil {
  18. fmt.Fprintf(os.Stderr,"Error: %s",err.Error())
  19. return
  20. }
  21.  
  22. // pLocalTCPAddr,err := net.ResolveTCPAddr("tcp","127.0.0.1:7070")
  23.  
  24. pTCPConn,err := net.DialTCP("tcp",nil/*pLocalTCPAddr*/,pRemoteTCPAddr)
  25.  
  26. if err != nil {
  27. fmt.Fprintf(os.Stderr,err.Error())
  28. return
  29. }
  30.  
  31.  
  32. n,err := pTCPConn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))
  33. if err != nil {
  34. fmt.Fprintf(os.Stderr,err.Error())
  35. return
  36. }
  37. defer pTCPConn.Close()
  38.  
  39. fmt.Fprintf(os.Stdout,"writed: %d\n",n)
  40.  
  41. buf,err := IoUtil.ReadAll(pTCPConn)
  42. r := len(buf)
  43. fmt.Fprintf(os.Stdout,string(buf[:r]))
  44. fmt.Fprintf(os.Stdout,"readed: %d\n",r)
  45.  
  46. }
  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.Error())
  18. return
  19. }
  20. pTCPListener,error := net.ListenTCP("tcp4",pTCPAddr)
  21. if error != nil {
  22. fmt.Fprintf(os.Stdout,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.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. }
  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.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.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,string(buf[:n]))
  35. }
  1. /** * Created by Administrator on 13-12-10. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. )
  9.  
  10. /** * UDP 服务器 */
  11. func main() {
  12. pUDPAddr,err := net.ResolveUDPAddr("udp",":7070")
  13.  
  14. if err != nil {
  15. fmt.Fprintf(os.Stderr,err.Error())
  16. return
  17. }
  18.  
  19. pUDPConn,err := net.ListenUDP("udp",pUDPAddr)
  20.  
  21. if err != nil {
  22. fmt.Fprintf(os.Stderr,err.Error())
  23. return
  24. }
  25.  
  26. defer pUDPConn.Close()
  27.  
  28. for {
  29.  
  30. buf := make([]byte,256)
  31. n,pUDPAddr,err := pUDPConn.ReadFromUDP(buf)
  32.  
  33. if err != nil {
  34. fmt.Fprintf(os.Stderr,err.Error())
  35. return
  36. }
  37. fmt.Fprintf(os.Stdout,"readed: %d",n)
  38.  
  39. n,err = pUDPConn.WriteToUDP(buf,pUDPAddr)
  40. if err != nil {
  41. fmt.Fprintf(os.Stderr,n)
  42. }
  43. }
  1. /** * Created by Administrator on 13-12-10. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. )
  9.  
  10. /** * UDP 客户端 */
  11. func main() {
  12.  
  13. pUDPAddr,"127.0.0.1:7070")
  14.  
  15. if err != nil {
  16. fmt.Fprintf(os.Stderr,"Error ResolveUDPAddr: %s",err := net.DialUDP("udp",nil,"Error DialUDP: %s",err.Error())
  17. return
  18. }
  19.  
  20. n,err := pUDPConn.Write([]byte("你好啊!!!"))
  21.  
  22. if err != nil {
  23. fmt.Fprintf(os.Stderr,"Error WriteToUDP: %s",n)
  24.  
  25. buf := make([]byte,1024)
  26. n,_,err = pUDPConn.ReadFromUDP(buf)
  27.  
  28. if err != nil {
  29. fmt.Fprintf(os.Stderr,"Error ReadFromUDP: %s","readed: %d %s",n,string(buf[:n]))
  30. }
  1. /** * Created by Administrator on 13-12-10. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. )
  9.  
  10. /* 很多时候,服务器会处理多个端口的监听!可以使用select轮询处理这种情况 */
  11. func main() {
  12.  
  13. lsr,err := net.Listen("tcp",err.Error())
  14. return
  15. }
  16.  
  17. for {
  18. conn,err := lsr.Accept()
  19. if err != nil {
  20. fmt.Fprintf(os.Stderr,err.Error())
  21. continue
  22. }
  23.  
  24. go connHandler(conn)
  25.  
  26. }
  27.  
  28. fmt.Println("Done !")
  29. }
  30.  
  31. func connHandler(conn net.Conn) {
  32. defer conn.Close()
  33.  
  34. var buf[512]byte
  35. for {
  36. n,err := conn.Read(buf[0:])
  37. if err != nil {
  38. fmt.Fprintf(os.Stderr,err.Error())
  39. return
  40. }
  41. _,err = conn.Write(buf[0:n])
  42. if err != nil {
  43. fmt.Fprintf(os.Stderr,err.Error())
  44. return
  45. }
  46. }
  47. }
  1. /** * Created by Administrator on 13-12-10. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. "bufio"
  9. )
  10.  
  11. func main() {
  12.  
  13. conn,err := net.Dial("tcp","192.168.1.97:7070")
  14. if err != nil {
  15. fmt.Sprint(os.Stderr,err.Error())
  16. return
  17. }
  18.  
  19.  
  20. go func() {
  21. var buf [512]byte
  22. for {
  23. n,err := conn.Read(buf[0:])
  24. if err != nil {
  25. fmt.Fprintf(os.Stderr,err.Error())
  26. return
  27. }
  28. fmt.Fprintf(os.Stdout,string(buf[0:n]))
  29. }
  30.  
  31. }()
  32.  
  33. for {
  34. fmt.Fprintf(os.Stdout,"\n输入:")
  35. pReader := bufio.NewReader(os.Stdin)
  36. line,err := pReader.ReadLine()
  37. if err != nil {
  38. fmt.Fprintf(os.Stderr,err.Error())
  39. return
  40. }
  41. conn.Write(line[0:])
  42. }
  43. }
  1. /** * Created by Administrator on 13-12-10. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. )
  9.  
  10. /** UDP Server */
  11. func main() {
  12.  
  13. packetConn,err := net.ListenPacket("udp",":7070")
  14.  
  15. if err != nil {
  16. fmt.Fprintf(os.Stdout,err.Error())
  17. return
  18. }
  19. defer packetConn.Close()
  20.  
  21. var buf [512]byte
  22. for {
  23. n,addr,err := packetConn.ReadFrom(buf[0:])
  24. if err != nil {
  25. fmt.Fprintf(os.Stdout,err.Error())
  26. return
  27. }
  28.  
  29. fmt.Fprintf(os.Stdout,"recv: %s",string(buf[0:n]))
  30.  
  31. _,err = packetConn.WriteTo(buf[0:n],addr)
  32. if err != nil {
  33. fmt.Fprintf(os.Stdout,err.Error())
  34. return
  35. }
  36. }
  37.  
  38.  
  39. }
  1. /** * Created by Administrator on 13-12-10. */
  2. package main
  3.  
  4. import (
  5. "net"
  6. "fmt"
  7. "os"
  8. "time"
  9. )
  10.  
  11. /** UDP Client */
  12. func main() {
  13. conn,err := net.Dial("udp","127.0.0.1:7070")
  14.  
  15. if err != nil {
  16. fmt.Fprintf(os.Stdout,err.Error())
  17. return
  18. }
  19.  
  20. defer conn.Close()
  21.  
  22.  
  23. _,err = conn.Write([]byte("你好啊UDP"))
  24. if err != nil {
  25. fmt.Fprintf(os.Stdout,err.Error())
  26. return
  27. }
  28.  
  29. var buf [512]byte
  30. conn.SetReadDeadline(time.Now().Add(time.Second * 1)) // 阻塞,直到接收到消息,设置阻塞时间1秒
  31. n,err := conn.Read(buf[0:])
  32. if err != nil {
  33. fmt.Fprintf(os.Stdout,string(buf[0:n]))
  34.  
  35. }

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

猜你在找的Go相关文章