go网络编程41——http编程

http请求包格式

package main

import (
	"fmt"
	"net"
)

func main() {
	listen, err := net.Listen("tcp", "127.0.0.1:8000")
	if err != nil {
		fmt.Println("net.Listen err = ", err)
		return
	}

	defer listen.Close()

	conn, err1 := listen.Accept()
	if err != nil {
		fmt.Println("listen.Accept err1 = ", err1)
		return
	}

	defer conn.Close()

	//Read时需创建切片存储数据
	buf := make([]byte, 4*1024)
	num, err2 := conn.Read(buf)
	if num == 0 {
		fmt.Println("conn.Read err2 = ", err2)
		return
	}

	fmt.Printf("%v", string(buf[:num]))
}

测试服务器

package main

import (
	"fmt"
	"net/http"
)

func myHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "Hello Go")
}

func main() {
	http.HandleFunc("/go", myHandler)

	//在指定地址进行监听,开启一个HTTP
	http.ListenAndServe("127.0.0.1:8000", nil)
}

http响应包格式

package main

import (
	"fmt"
	"net"
)

func main() {
	conn, err := net.Dial("tcp", ":8000")
	if err != nil {
		fmt.Println("net.Dial err = ", err)
		return
	}

	defer conn.Close()

	//可以添加自己的http请求报文
	request := ""
	conn.Write([]byte(request))

	buf := make([]byte, 4*1024)
	num, err1 := conn.Read(buf)
	if num == 0 {
		fmt.Println("err1 = ", err1)
		return
	}

	fmt.Printf("%v", string(buf[:num]))
}

http服务器

package main

import (
	"fmt"
	"net/http"
)

//w:给客户端回复数据
//req:读取客户端回复的数据
func HandleConnect(w http.ResponseWriter, req *http.Request) {
	fmt.Println("req.Method = ", req.Method)
	fmt.Println("req.URL = ", req.URL)
	fmt.Println("req.Header = ", req.Header)
	fmt.Println("req.Body = ", req.Body)

	//给客户端回复数据
	w.Write([]byte("Hello Go"))
}

func main() {
	//注册处理函数
	http.HandleFunc("/", HandleConnect)

	//监听绑定
	http.ListenAndServe(":8000", nil)
}

http客户端

package main

import (
	"fmt"
	"net/http"
)

func main() {
	//req, err := http.Get("http://www.baidu.com")
	req, err := http.Get("http://127.0.0.1:8000")
	if err != nil {
		fmt.Println("Get err = ", err)
		return
	}

	defer req.Body.Close()

	fmt.Println("Status = ", req.Status)
	fmt.Println("StatusCode = ", req.StatusCode)
	fmt.Println("Header = ", req.Header)

	buf := make([]byte, 4*1024)
	var str string

	for {
		num, err := req.Body.Read(buf)
		if num == 0 {
			fmt.Println("Read err = ", err)
			break
		}

		str += string(buf[:num])
	}

	fmt.Println("str = ", str)
}

猜你喜欢

转载自blog.csdn.net/www_dong/article/details/128026344