// 写方法,定义传输:头5个字节为传输内容长度
func write(conn net.Conn, txt string) error {
length := len(txt)
n, err := conn.Write([]byte(fmt.Sprintf("%O5d", length)))
fmt.Println(n, err)
if err != nil {
return err
}
return nil
}
// 读,先读长度
func read(conn net.Conn) (string, error) {
lenthBytes := make([]byte, 5)
_, err := conn.Read(lenthBytes)
if err != nil {
fmt.Println(err)
return "", err
}
lenth, err := strconv.Atoi(string(lenthBytes))
if err != nil {
fmt.Println(err)
return "", err
}
bytes := make([]byte, lenth)
_, err = conn.Read(bytes)
if err != nil {
fmt.Println(err)
return "", err
}
return string(bytes), nil
}
服务器端:
addr := "127.0.0.1:8888"
protocol := "tcp"
// 监听端口
listener, err := net.Listen(addr, protocol)
if err != nil {
return
}
fmt.Println("Listener Addr: ", listener.Addr())
// 创建连接
conn, err := listener.Accept()
if err != nil {
fmt.Println(err)
return
} else {
// 数据交互
fmt.Println(conn.LocalAddr(), conn.RemoteAddr())
write(conn, "啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊")
// 关闭连接
conn.Close()
}
并发服务器端
for{
addr := "127.0.0.1:8888"
protocol := "tcp"
// 监听端口
listener, err := net.Listen(addr, protocol)
if err != nil {
return
}
fmt.Println("Listener Addr: ", listener.Addr())
// 创建连接
conn, err := listener.Accept()
}
go func(){
if err != nil {
fmt.Println(err)
return
} else {
// 数据交互
fmt.Println(conn.LocalAddr(), conn.RemoteAddr())
write(conn, "啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊")
// 关闭连接
conn.Close()
}()
客户端:
addr := "127.0.0.1:8889"
protocol := "tcp"
// 创建连接
conn, err := net.Dial(protocol, addr)
if err != nil {
return
}
// 数据交互
str, err := read(conn)
if err != nil {
return
}
fmt.Println(str)
// 关闭连接
conn.Close()