服务端
package main
import (
"bufio"
"fmt"
"io"
"net"
)
func main() {
ln, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Listen失败", err)
return
}
defer ln.Close()
for {
//Accept阻塞,直到有新的连接
conn, err := ln.Accept()
if err != nil {
fmt.Println("Accept", err)
return
}
go handleConnection(conn)
}
}
func handleConnection(c net.Conn) {
if c == nil {
fmt.Println("conn is nil")
return
}
defer c.Close()
reader := bufio.NewReader(c)
for {
//ReadString阻塞,直到读到\n
msg, err := reader.ReadString('\n')
if err != nil {
if err == io.EOF {
fmt.Println("connection close")
} else {
fmt.Println("ReadString err", err)
}
return
}
fmt.Println("read data:", msg)
b := []byte("ok")
c.Write(b)
}
}
客户端
package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("Dial err:", err)
return
}
connHandler(conn)
}
func connHandler(c net.Conn) {
//接收终端输入
reader := bufio.NewReader(os.Stdin)
//缓冲
buf := make([]byte, 1024)
fmt.Println("Please input data...")
for {
//读取终端输入直到读取到\n
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("ReadString err:", err)
return
}
//写入数据
c.Write([]byte(input))
//服务器端返回的数据写入buf
cnt, err := c.Read(buf)
if err != nil {
fmt.Println("Read err:", err)
return
}
//服务器端回传的信息
fmt.Println("server response:", string(buf[0:cnt]))
}
}
验证
客户端输入数据
服务端输出
总结
建立连接后就跟读写文件一样就可以实现通信了