服务端实现

import (
"fmt"
"net"
"os"
"strings"
)

func CheckErrorS(err error) {
if err != nil {
fmt.Println("网络错误", err.Error())
os.Exit(1)
}
}

func Processinfo(conn net.Conn) {
buffer := make([]byte, 1024) //开创缓冲区
defer conn.Close() //关闭连接

for {
n, err := conn.Read(buffer) //读取数据
CheckErrorS(err)

if n != 0 {
//拿到客户端地址
remoteAddr := conn.RemoteAddr()
msg := string(buffer[:n])
fmt.Println("收到消息",msg, "来自", remoteAddr)

if strings.Contains(msg,"钱") {
conn.Write([]byte("fuckoff"))
break
}
conn.Write([]byte("已阅:"+msg))
}
}

}

func main() {
//建立TCP服务器
listener, err := net.Listen("tcp", "127.0.0.1:8898")
CheckErrorS(err)
defer listener.Close() //关闭网络

fmt.Println("服务器正在等待")

for {
conn, err := listener.Accept() //新的客户端连接
CheckErrorS(err)

//处理每一个客户端
go Processinfo(conn)
}

}

客户端实现

import (
"fmt"
"net"
"bufio"
"os"
)

func CheckErrorC(err error) {
if err != nil {
fmt.Println("网络错误", err.Error())
os.Exit(1)
}
}

func MessageSend(conn net.Conn) {
var msg string
reader := bufio.NewReader(os.Stdin) //读取键盘输入

for {
lineBytes, _, _ := reader.ReadLine() //读取一行
msg = string(lineBytes) //键盘输入转化为字符串

if msg == "exit" {
conn.Close()
fmt.Println("客户端关闭")
break
}

_, err := conn.Write([]byte(msg)) //输入写入字符串
if err != nil {
conn.Close()
fmt.Println("客户端关闭")
break
}

}
}

func main() {
conn, err := net.Dial("tcp", "127.0.0.1:8898") //建立TCP服务器
CheckErrorC(err) //检查错误
defer conn.Close()

//发送消息中有阻塞读取标准输入的代码
//为了避免阻塞住消息的接收,所以把它独立的协程中
go MessageSend(conn)

buffer := make([]byte, 1024)
for {
n, err := conn.Read(buffer)
CheckErrorC(err)

msg := string(buffer[:n])
fmt.Println("收到服务器消息", msg)

if msg=="fuckoff"{
break
}

}

fmt.Println("连接已断开")
}