• Go语言网络编程(socket编程)http编程


    1、http编程

    1.1.1 web工作流程

    Web服务器的工作原理可以简单地归纳为
    客户机通过TCP/IP协议建立到服务器的TCP连接
    客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
    服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端
    客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果

    1.1.2. HTTP协议

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议

    HTTP协议通常承载于TCP协议之上

    1.1.3.HTTP服务端

    package main
    
    import (
        "fmt"
        "net/http"
    )
    
    func main() {
        //http://127.0.0.1:8000/go
        // 单独写回调函数
        http.HandleFunc("/go", myHandler)
        //http.HandleFunc("/ungo",myHandler2 )
        // addr:监听的地址
        // handler:回调函数
        http.ListenAndServe("127.0.0.1:8000", nil)
    }
    
    // handler函数
    func myHandler(w http.ResponseWriter, r *http.Request) {
        fmt.Println(r.RemoteAddr, "连接成功")
        // 请求方式:GET POST DELETE PUT UPDATE
        fmt.Println("method:", r.Method)
        // /go
        fmt.Println("url:", r.URL.Path)
        fmt.Println("header:", r.Header)
        fmt.Println("body:", r.Body)
        // 回复
        w.Write([]byte("www.5lmh.com"))
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    1.1.4 HTTP服务端

    package main
    
    import (
        "fmt"
        "io"
        "net/http"
    )
    
    func main() {
        //resp, _ := http.Get("http://www.baidu.com")
        //fmt.Println(resp)
        resp, _ := http.Get("http://127.0.0.1:8000/go")
        defer resp.Body.Close()
        // 200 OK
        fmt.Println(resp.Status)
        fmt.Println(resp.Header)
    
        buf := make([]byte, 1024)
        for {
            // 接收服务端信息
            n, err := resp.Body.Read(buf)
            if err != nil && err != io.EOF {
                fmt.Println(err)
                return
            } else {
                fmt.Println("读取完毕")
                res := string(buf[:n])
                fmt.Println(res)
                break
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    网络层常见协议——IPV4、IPV6、ARP、ICMP、QoS
    C++编程(五)单例模式 友元
    MFC Windows 程序设计[152]之耍酷滑动滚动条
    用于光波导系统的均匀性探测器
    【能效管理】安科瑞新能源充电桩收费运维管理云平台应用分析
    牛客TOP101:链表内指定区间反转
    短视频矩阵系统/pc、小程序版独立原发源码开发搭建上线
    Django中间件
    【AI工程论文解读】01-面向AI使能系统的软件工程课程体系
    FineReport中字符串常用处理函数
  • 原文地址:https://blog.csdn.net/qq_44139121/article/details/132763147