golang使用net/http实现一对客户端和服务器连接的例子

原创 2016年04月18日 00:58:02

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

golang-net/http源码分析之http server

golang-net/http源码分析之http server
  • screscent
  • screscent
  • 2016年12月12日 15:52
  • 1636

Go语言net/http 解读.

Http包提供实现HTTP客户端和服务端的方法与函数。 Get、Head、Post、PostForm配合使用实现HTTP请求: resp, err := http.Get("http://exam...
  • fyxichen
  • fyxichen
  • 2015年08月18日 11:15
  • 4003

golang中net包用法(一)

net包对于网络I/O提供了便携式接口,包括TCP/IP,UDP,域名解析以及Unix Socket。尽管net包提供了大量访问底层的接口,但是大多数情况下,客户端仅仅只需要最基本的接口,例如Dial...
  • chenbaoke
  • chenbaoke
  • 2015年01月16日 20:30
  • 10148

Golang写一个tcp聊天测试

go代码很简单  就可以实现简单的聊天 server.go package main  import ( "fmt";"net" ) const ( ip = "" ...
  • nadakiss
  • nadakiss
  • 2014年04月28日 10:59
  • 12936

go net 包详解1

/** * Created by Administrator on 13-12-9. */ package main import ( "fmt" "os" "net" ) /** *...
  • eclipser1987
  • eclipser1987
  • 2013年12月10日 17:27
  • 11361

GOLANG简易http客户端实现

下面的程序通过建立TCP连接来实现初步的HTTP协议,通过向网络主机发送HTTP HEAD请求,来读取网络主机返回的信息。 e.g. package main import (    ...
  • wo198711203217
  • wo198711203217
  • 2017年06月06日 16:34
  • 339

一个简单的Golang实现的HTTP Proxy

最近因为换了Mac,以前的Linux基本上不再使用了,但是我的SS代理还得用。SS代理大家都了解,一个很NB的socks代理工具,但是就是因为他是Socks的,想用HTTP代理的时候很不方便。以前在L...
  • michael__li
  • michael__li
  • 2016年12月30日 12:05
  • 5343

golang有用的库及工具 之 fasthttp客户端 最通用最有效最简单使用方式

fasthttp 是go语言中最常用性能最好的http请求库。 那么如何使用fasthttp 客户端调用http请求。 常用http kv请求: //http请求 func doTi...
  • niyuelin1990
  • niyuelin1990
  • 2017年10月31日 16:20
  • 493

golang使用http client发起get和post请求示例

golang要请求远程网页,可以使用net/http包中的client提供的方法实现。查看了官方网站有一些示例,没有太全面的例子,于是自己整理了一下。 get请求 get请求可以直接htt...
  • webxscan
  • webxscan
  • 2017年07月09日 13:52
  • 492

golang中net/http包用法

1. 前言 http包包含http客户端和服务端的实现,利用Get,Head,Post,以及PostForm实现HTTP或者HTTPS的请求. 2. 本文分析内容安排 函数 Execute...
  • yuanfang_way
  • yuanfang_way
  • 2015年11月16日 18:37
  • 1895
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:golang使用net/http实现一对客户端和服务器连接的例子
举报原因:
原因补充:

(最多只允许输入30个字)