golang使用net/http實現一對客戶端和服務器連接的例子

golang的net/http封裝很強大,可惜網上的教程或者源碼很少。這裏簡單實現了一對服務器和客戶端的連接。

客戶端代碼如下:

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
    "strings"
)

type person struct {
    NAME string
    AGE  int
}

func main() {
    tmp := person{"xx", 1}
    data, err := json.Marshal(tmp)  //轉化爲JSON
    if err != nil {
        fmt.Println("json Marshal err", err)
    }
    resp, err := http.Post("http://127.0.0.1:8080/test", "application/x-www-form-urlencoded", strings.NewReader(string(data)))
    fmt.Println(data)
    fmt.Println(string(data))
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body) //讀取服務器返回的信息
    if err != nil {
        fmt.Println("read err")
    }
    fmt.Println(string(body))
}

注意測試的時候把ip地址換成自己的地址


服務端源碼如下:

package main


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


func main() {
http.HandleFunc("/test", hand)
err := http.ListenAndServe("10.180.63.218:8080", nil)
if err != nil {
fmt.Println("err")
}
}


func hand(w http.ResponseWriter, r *http.Request) {
    fmt.Println("ok")
    w.Write([]byte("connect ok"))

    defer r.Body.Close()
    body, err := ioutil.ReadAll(r.Body)
    if err != nil {
        fmt.Println("read err")
    }
    fmt.Println(body)
    tmp := person{}
    err = json.Unmarshal(body, &tmp)  //JSON還原

    if err != nil {
        fmt.Println("unmarshal err")
    }
    fmt.Println(tmp)
}

注意測試的時候把ip地址換成自己的地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章