服务器端代码:
package main
import (
"fmt"
"net"
)
func main() {
fmt.Println("hello world")
lner, err := net.Listen("tcp", "localhost:8888")
if err != nil {
fmt.Println("listener creat error", err)
}
fmt.Println("waiting for client")
for {
conn, err := lner.Accept()
if err != nil {
fmt.Println("accept error", err)
}
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
fmt.Println("connection success")
fmt.Println("client address: ", conn.RemoteAddr())
all_mess := ""
for {
buf := make([]byte, 16)
fmt.Printf("等待客户端%s 发送消息\n", conn.RemoteAddr().String())
// 读取数据
n, err := conn.Read(buf)
if err != nil {
fmt.Printf("客户端退出err=%v", err)
return
}
if string(buf[:n]) == "exit" {
break
}
all_mess = string(buf[:n])
fmt.Println(string(buf[:n]))
sendLen := len(all_mess)
fmt.Println("send message len;", sendLen)
}
fmt.Println("send message success")
}
客户端代码:
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main() {
// 连接服务端
conn, err := net.Dial("tcp", "127.0.0.1:8888")
if err != nil {
fmt.Println("client dial err=", err)
return
}
// 构建reader, 从控制台读入数据
reader := bufio.NewReader(os.Stdin)
for {
// 按行读取数据
line, err := reader.ReadString('\n')
if err != nil {
fmt.Println("readingString err", err)
}
// 去除换行
line = strings.Trim(line, " \r\n")
if line == "exit" {
fmt.Println("将客户端退出")
break
}
// 传送数据
_, err = conn.Write([]byte(line + "\n"))
if err != nil {
fmt.Println("conn.Write err=", err)
}
// fmt.Printf("客户端发送了%d字节数据, 退出", n)
}
}