溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

golang的網(wǎng)絡(luò)編程http

發(fā)布時(shí)間:2020-06-26 00:31:26 來(lái)源:網(wǎng)絡(luò) 閱讀:400 作者:ck_god 欄目:編程語(yǔ)言

服務(wù)器

// code_054_http_service_02 project main.go
package main

import (
    "fmt"
    "net/http"
)

//服務(wù)端編寫的業(yè)務(wù)邏輯處理程序
//hander函數(shù): 具有func(w http.ResponseWriter, r *http.Requests)簽名的函數(shù)
func myHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Println(r.RemoteAddr, "連接成功")  //r.RemoteAddr遠(yuǎn)程網(wǎng)絡(luò)地址
    fmt.Println("method = ", r.Method) //請(qǐng)求方法
    fmt.Println("url = ", r.URL.Path)
    fmt.Println("header = ", r.Header)
    fmt.Println("body = ", r.Body)
    w.Write([]byte("hello go")) //給客戶端恢復(fù)的數(shù)據(jù)
}

func main() {
    http.HandleFunc("/go", myHandler)
    //該方法用于在指定的 TCP 網(wǎng)絡(luò)地址 addr 進(jìn)行監(jiān)聽,然后調(diào)用服務(wù)端處理程序來(lái)處理傳入的連接請(qǐng)求。
    //該方法有兩個(gè)參數(shù):第一個(gè)參數(shù) addr 即監(jiān)聽地址;第二個(gè)參數(shù)表示服務(wù)端處理程序,通常為空
    //第二個(gè)參數(shù)為空意味著服務(wù)端調(diào)用 http.DefaultServeMux 進(jìn)行處理
    http.ListenAndServe("127.0.0.1:8006", nil)
}

客戶端

// code_054_http_client_02 project main.go
package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
)

func main() {

    //get方式請(qǐng)求一個(gè)資源
    //resp, err := http.Get("http://www.baidu.com")
    //resp, err := http.Get("http://www.neihan8.com/article/index.html")
    resp, err := http.Get("http://127.0.0.1:8000/go")
    if err != nil {
        log.Println(err)
        return
    }

    defer resp.Body.Close() //關(guān)閉

    fmt.Println("header = ", resp.Header)
    fmt.Printf("resp status %s\nstatusCode %d\n", resp.Status, resp.StatusCode)
    fmt.Printf("body type = %T\n", resp.Body)

    buf := make([]byte, 2048) //切片緩沖區(qū)
    var tmp string

    for {
        n, err := resp.Body.Read(buf) //讀取body包內(nèi)容
        if err != nil && err != io.EOF {
            fmt.Println(err)
            return
        }

        if n == 0 {
            fmt.Println("讀取內(nèi)容結(jié)束")
            break
        }
        tmp += string(buf[:n]) //累加讀取的內(nèi)容
    }

    fmt.Println("buf = ", string(tmp))
}
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI