Go 通讯 简单实战
server.go
package main
import (
"fmt"
"net" // 做网络socket开发时,net包含有我们需要的所有的方法和函数
)
func process(conn net.Conn) {
// 循环接受客户端发送的数据
defer conn.Close() // 关闭conn
for {
// 创建一个切片
buf := make([]byte, 1024)
//fmt.Println("服务器在等待客户端%v发送信息", conn.RemoteAddr())
n, err := conn.Read(buf) // 从conn读取
if err != nil {
fmt.Println("read err=", err)
return
}
// :n 必不可少
fmt.Print(string(buf[:n]))
}
}
func main() {
fmt.Println("服务器开始监听...")
listen, err := net.Listen("tcp", "127.0.0.1:8888")
if err != nil {
fmt.Println("listen err=", err)
return
}
defer listen.Close() // 延时关闭
for {
// 等待客户端连接
fmt.Println("等待客户端连接...")
conn, err := listen.Accept()
if err != nil {
fmt.Println("Accept() err =", err)
}
fmt.Printf("Accept() suc con=%v, ip=%v\n", conn, conn.RemoteAddr())
//这里准备起协程,为后续客户端服务
go process(conn)
}
fmt.Println("listen suc=", listen)
}
client.go
package main
import (
"bufio"
"fmt"
"net" // 做网络socket开发时,net包含有我们需要的所有的方法和函数
"os"
"strings"
)
func main() {
fmt.Println("客户端开始连接...")
conn, err := net.Dial("tcp", "127.0.0.1:8888")
if err != nil {
fmt.Println("conn err = ", err)
return
}
for {
reader := bufio.NewReader(os.Stdin)
line, err := reader.ReadString('\n')
if err != nil {
fmt.Println("readString err=", err)
}
strings.Trim(line, " \r\n")
if line == "exit" {
fmt.Println("客户端退出")
break
}
_, err = conn.Write([]byte(line + "\n"))
if err != nil {
fmt.Println("write err=", err)
}
}
conn.Close()
//fmt.Println("conn suc = %v", conn)
}