一.服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package main

import (
"fmt"
"net"
)

// 服务端
func main() {
fmt.Println("服务器开始监听...")
listen, err := net.Listen("tcp", "localhost:8889")

if err != nil {
fmt.Println("监听错误:", err)
return
}
// 延时关闭
defer listen.Close()
fmt.Println("listen地址:", listen.Addr()) //127.0.0.1:8888

for {
// 接收连接
conn, err := listen.Accept()
if err != nil {
fmt.Println("接收连接失败:", err)
continue
} else {
fmt.Println("接收连接conn:", conn.RemoteAddr())
}
// 处理连接请求
go handleConn(conn)
}
}

func handleConn(conn net.Conn) {
defer conn.Close()
for {
fmt.Println("等待客户端消息:")
// 读取客户端发来的消息
var bf = make([]byte, 1024)
n, err := conn.Read(bf)
if err != nil {
fmt.Println("服务端读取数据失败:", err)
return
}
fmt.Println("服务端接收数据:", string(bf[:n]))
}
}

二.客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package main

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

// 客户端
func main() {
conn, err := net.Dial("tcp", "localhost:8889")
if err != nil {
fmt.Println("客户端连接服务端错误:", err)
return
}
defer conn.Close()
for {
fmt.Println("请输入消息(输入exit退出客户端):")
// 发送消息给服务端
readString, err := bufio.NewReader(os.Stdin).ReadString('\n') // 终端接收标准输入
readString = strings.TrimSpace(readString) // 去除字符串两端的空白字符
if readString == "exit" {
break
}
if err != nil {
fmt.Println("终端读取数据失败:", err)
continue
} else {
fmt.Println("即将发送数据:", readString)
}

n, err := conn.Write([]byte(readString))
if err != nil {
fmt.Println("发送数据失败:", err)
continue
}
fmt.Println("已发送数据字节数:", n)
}

fmt.Println("成功退出客户端!!!!!!!")
}