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