敬告:本文不讲解代码,只是把代码展示出来。
1、简单示例
1.1、服务端代码
package main
import (
"fmt"
"net"
)
func process(conn net.Conn) {
// 处理客户端请求
defer conn.Close() //关闭连接,如果不关闭会因为连接数不释放,导致服务器无法接收新的连接
for {
//创建新的切片
buf := make([]byte, 1024)
//读取客户端数据。如果客户端不 conn.Write(),conn.Read()会一直阻塞
fmt.Printf("等待客户端发送数据...%v", conn.RemoteAddr())
n, err := conn.Read(buf)
if err != nil {
fmt.Println("客户端连接断开:", err)
break
}
//打印客户端发送的数据
fmt.Print("客户端发送的数据:", string(buf[:n])) //[:n]一定要写,否则会打印多余的东西出来
}
}
func main() {
fmt.Println("服务器开始监听...")
//net.Listen("tcp", "0.0.0.0:8888")
//1.tcp 表示使用网络协议是 tcp
//2. 0.0.0.0 表示监听 8888 端口
listener, err := net.Listen("tcp", "0.0.0.0:8888")
if err != nil {
fmt.Println("服务器监听失败:", err)
return
}
defer listener.Close()
for {
// 等待客户端连接
conn, err := listener.Accept()
if err != nil {
fmt.Println("服务器接收客户端连接失败:", err)
continue
} else {
fmt.Println("服务器接收客户端连接成功:", conn.RemoteAddr())
}
// 处理客户端请求
//go handleClient(conn)
go process(conn)
}
}
1.2、客户端代码
package main
import