go net 包詳解1

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
/** * Created by Administrator on 13-12-9. */package mainimport ("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 %s\n", ip, ip.String())defaultMask := ip.DefaultMask()fmt.Fprintf(os.Stdout, "DefaultMask: %s %s\n", defaultMask, defaultMask.String())ones, bits := defaultMask.Size()fmt.Fprintf(os.Stdout, "ones: %d bits: %d\n", ones, bits)}




/** * Created by Administrator on 13-12-9. */package mainimport ("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 mainimport ("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: %s\n", ipAddr.String(), ipAddr.IP, ipAddr.Network(), ipAddr.Zone)// 百度,雖然只有一個網域名稱,但實際上,他對應電信,網通,聯通等又有多個IP地址ns, err := net.LookupHost(domain)if err != nil {fmt.Fprintf(os.Stderr, "Err: %s", 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 mainimport ("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 mainimport ("net""fmt""os")func main() {// TCPAddr 包涵IP 和 Port// 將一個host地址轉換為TCPAddr。host=ip:portpTCPAddr, err := net.ResolveTCPAddr("tcp", "www.baidu.com:80")if err != nil {fmt.Fprintf(os.Stderr, "Err: %s", 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 mainimport ("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, "Error: %s", err.Error())return}n, err := pTCPConn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", err.Error())return}defer pTCPConn.Close()fmt.Fprintf(os.Stdout, "writed: %d\n", n)buf, err := ioutil.ReadAll(pTCPConn)r := len(buf)fmt.Fprintf(os.Stdout, string(buf[:r]))fmt.Fprintf(os.Stdout, "readed: %d\n", r)}



/** * Created by Administrator on 13-12-10. */package mainimport ("net""fmt""os""time")func main() {pTCPAddr, error := net.ResolveTCPAddr("tcp4", ":7070")if error != nil {fmt.Fprintf(os.Stdout, "Error: %s", error.Error())return}pTCPListener, error := net.ListenTCP("tcp4", pTCPAddr)if error != nil {fmt.Fprintf(os.Stdout, "Error: %s", error.Error())return}defer pTCPListener.Close()for {pTCPConn, error := pTCPListener.AcceptTCP()if error != nil {fmt.Fprintf(os.Stdout, "Error: %s", 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 mainimport ("net""fmt""os""time")func main() {//url := "baidu.com:80"url := "facebook.com:80"conn, error := net.DialTimeout("tcp", url, time.Second * 10) // 帶有逾時限制的connif error != nil {fmt.Fprintf(os.Stderr, "Error: %s", error.Error())return}n , error := conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))if error != nil {fmt.Fprintf(os.Stderr, "Error: %s", 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, "Error: %s", error.Error())return}fmt.Fprintf(os.Stdout, string(buf[:n]))}




/** * Created by Administrator on 13-12-10. */package mainimport ("net""fmt""os")/** * UDP 伺服器 */func main() {pUDPAddr, err := net.ResolveUDPAddr("udp", ":7070")if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", err.Error())return}pUDPConn, err := net.ListenUDP("udp", pUDPAddr)if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", err.Error())return}defer pUDPConn.Close()for {buf := make([]byte, 256)n , pUDPAddr, err := pUDPConn.ReadFromUDP(buf)if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", err.Error())return}fmt.Fprintf(os.Stdout, "readed: %d", n)n, err = pUDPConn.WriteToUDP(buf, pUDPAddr)if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", err.Error())return}fmt.Fprintf(os.Stdout, "writed: %d", n)}}



/** * Created by Administrator on 13-12-10. */package mainimport ("net""fmt""os")/** * UDP 用戶端 */func main() {pUDPAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:7070")if err != nil {fmt.Fprintf(os.Stderr, "Error ResolveUDPAddr: %s", err.Error())return}pUDPConn, err := net.DialUDP("udp", nil, pUDPAddr)if err != nil {fmt.Fprintf(os.Stderr, "Error DialUDP: %s", err.Error())return}n, err := pUDPConn.Write([]byte("你好啊!!!"))if err != nil {fmt.Fprintf(os.Stderr, "Error WriteToUDP: %s", err.Error())return}fmt.Fprintf(os.Stdout, "writed: %d", n)buf := make([]byte, 1024)n, _, err = pUDPConn.ReadFromUDP(buf)if err != nil {fmt.Fprintf(os.Stderr, "Error ReadFromUDP: %s", err.Error())return}fmt.Fprintf(os.Stdout, "readed: %d  %s", n, string(buf[:n]))}




/** * Created by Administrator on 13-12-10. */package mainimport ("net""fmt""os")/*很多時候,伺服器會處理多個連接埠的監聽!可以使用select輪詢處理這種情況 */func main() {lsr, err := net.Listen("tcp", ":7070")if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", err.Error())return}for {conn , err := lsr.Accept()if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", err.Error())continue}go connHandler(conn)}fmt.Println("Done !")}func connHandler(conn net.Conn) {defer conn.Close()var buf[512]bytefor {n , err := conn.Read(buf[0:])if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", err.Error())return}_, err = conn.Write(buf[0:n])if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", err.Error())return}}}




/** * Created by Administrator on 13-12-10. */package mainimport ("net""fmt""os""bufio")func main() {conn, err := net.Dial("tcp", "192.168.1.97:7070")if err != nil {fmt.Sprint(os.Stderr, "Error: %s", err.Error())return}go func() {var buf [512]bytefor {n , err := conn.Read(buf[0:])if err != nil {fmt.Fprintf(os.Stderr, "Error: %s", 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, "Error: %s", err.Error())return}conn.Write(line[0:])}}



/** * Created by Administrator on 13-12-10. */package mainimport ("net""fmt""os")/** UDP Server */func main() {packetConn, err := net.ListenPacket("udp", ":7070")if err != nil {fmt.Fprintf(os.Stdout, "Error: %s", err.Error())return}defer packetConn.Close()var buf [512]bytefor {n , addr, err := packetConn.ReadFrom(buf[0:])if err != nil {fmt.Fprintf(os.Stdout, "Error: %s", 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, "Error: %s", err.Error())return}}}




/** * Created by Administrator on 13-12-10. */package mainimport ("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, "Error: %s", err.Error())return}defer conn.Close()_, err = conn.Write([]byte("你好啊UDP"))if err != nil {fmt.Fprintf(os.Stdout, "Error: %s", err.Error())return}var buf [512]byteconn.SetReadDeadline(time.Now().Add(time.Second * 1))  // 阻塞,直到接收到訊息,設定阻塞時間1秒n, err := conn.Read(buf[0:])if err != nil {fmt.Fprintf(os.Stdout, "Error: %s", err.Error())return}fmt.Fprintf(os.Stdout, "recv: %s", string(buf[0:n]))}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.