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地址换成自己的地址

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/su_sai/article/details/51176753
个人分类: golang
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭