Go net开发

Socket 编程

服务器端代码

package main

import (
	"fmt"
	"net"
)

func processConn(conn net.Conn) {
	// 与客户端通信
	for {
		var tmp [128]byte
		n, err := conn.Read(tmp[:])
		if err != nil {
			fmt.Println("read from conn failed,err:", err)
			return
		}
		fmt.Println(string(tmp[:n]))
	}

}

func main() {
	// 本地端口启动服务
	lister, err := net.Listen("tcp", "127.0.0.1:5001")
	if err != nil {
		fmt.Println("端口打开错误:127.0.0.1:5001")
		return
	}
	// 等待别人建立连接
	for {
		conn, err := lister.Accept()
		if err != nil {
			fmt.Println("接受失败")
			return
		}
		go processConn(conn)
	}

}

客户端代码

package main

import (
	"fmt"
	"net"
)

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

	// 循环发送数据
	var msg string
	for {
		fmt.Scanln(&msg)
		conn.Write([]byte(msg))
		fmt.Println("发送成功")
		if msg == "exit" {
			break
		}
	}
	conn.Close() // 关闭
}

HTTP编程

http服务端

服务端直接返回的就是超文本信息,也就是html网页。
http 是超文本传输协议,他是基于TCP协议

import "net/http"

func f1(w http.ResponseWriter, r *http.Request) {
	str := "<h1>哈哈,你好</h1>"
	w.Write([]byte(str))
}

func main() {
	http.HandleFunc("/post/test01", f1)
	http.ListenAndServe("127.0.0.1:5002", nil)
	// 访问上边的网址即可到达  http://localhost:5002/post/test01
}

http客户端

一般情况下,我们都是使用浏览器充当http请求的客户端,但是因为有些时候,比如要你访问一个网站一百次,可能使用程序写一个,会比你点一百下浏览器要好。

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	resp, err := http.Get("http://127.0.0.1:9090/xxx/")
	if err != nil {
		fmt.Println("连接错误")
		return
	}
	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("read body 有错误")
	}
	fmt.Println(string(b))
}
posted @ 2021-07-04 16:00  沧海一声笑rush  阅读(150)  评论(0编辑  收藏  举报