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)
}