1、socket通訊
服務端接收資料
package main import ( "fmt" "net" "strings" ) func main() { //建立監聽 ip := "127.0.0.1" port := 8848 address := fmt.Sprintf("%s:%d",ip,port) listen, err := net.Listen("tcp", address) if err != nil { fmt.Println(err) return } //一直輪詢監聽 for { fmt.Println("監聽中...") //接收資料 conn, err := listen.Accept() if err != nil { fmt.Println("accept",err) return } fmt.Println("連線成功") //啟動多個處理回撥 go handle(conn) } } func handle(conn net.Conn) { for{ //建立一個容器,用於接受讀取到的資料 buf := make([]byte,1024) //cnt真正讀取客戶端發來的資料長度 fmt.Println("準備讀取傳送過來的資料") cnt, err := conn.Read(buf) if err != nil { fmt.Println("cnt err",err) return } //只輸出收到的長度 fmt.Println("長度:",cnt,"---資料:",string(buf[:cnt])) //將資料轉成大寫 upperData := strings.ToUpper(string(buf[:cnt])) write, err := conn.Write([]byte(upperData)) if err != nil { fmt.Println("write err",err) return } fmt.Println("長度:",write,"---資料:",upperData) } //關閉 conn.Close() }
socket客戶端請求
func main() { dial, err := net.Dial("tcp", ":8848") if err != nil { panic(err) } fmt.Println("connect success") //不斷重複傳送多次 for { //傳送資料 sendData := []byte("hello world") write, err := dial.Write(sendData) if err != nil { panic(err) } fmt.Println("send :",write,"--sendData:",string(sendData)) //接收伺服器返回 buf := make([]byte,1024) read, err := dial.Read(buf) if err != nil { panic(err) } time.Sleep(time.Second) fmt.Println("client receive,",read,"--receive data:",string(buf[:read])) } defer dial.Close() }
2、http服務請求
服務端
func main() { //註冊路由 http.HandleFunc("/user", func(writer http.ResponseWriter, request *http.Request) { //write 將資料返回給客戶端 //request 請求資料 fmt.Println("method:",request.Method,request) io.WriteString(writer,"這是返回的資料") }) if err := http.ListenAndServe("127.0.0.1:8080",nil); err != nil { panic(err) } }
客戶端請求
func main() { //http包 client := http.Client{} rsp, err := client.Get("http://127.0.0.1:8080") if err != nil { panic(err) } fmt.Println(rsp,rsp.Body,rsp.Header.Get("Content-Type")) }