/**
golang tcp
*/
package main
import (
"fmt"
"net"
"strings"
"time"
)
var p = fmt.Println
func server() {
tcpAddr, _ := net.ResolveTCPAddr("tcp", ":7070")
l, e := net.ListenTCP("tcp", tcpAddr)
defer func() {
p("server closed")
l.Close()
}()
if e != nil {
return
}
for {
conn, e := l.Accept()
conn.SetDeadline(time.Now().Add(time.Second * 15))
if e != nil {
continue
}
go func(conn net.Conn) {
defer func() {
p("a clent closed or timeout")
conn.Close()
}()
for {
b := make([]byte, 25)
_, e := conn.Read(b)
if e != nil {
p("server:", e)
break
}
req := strings.TrimSpace(string(b))
conn.Write([]byte("来之服务端的回复:您输入了>>" + req))
if req == "exit" || req == "quit" {
break
}
}
}(conn)
}
}
func main() {
//server
go server()
//client
tcpAddr, _ := net.ResolveTCPAddr("tcp4", "127.0.0.1:7070")
conn, e := net.DialTCP("tcp4", nil, tcpAddr)
defer func() {
p("clent closed")
conn.Close()
}()
if e != nil {
return
}
go func() {
for {
b := make([]byte, 500)
_, e := conn.Read(b)
if e != nil {
p("client:", e) //e: eof
break
}
p(string(b))
}
}()
p("-----客户端:请输入.....")
for {
var input string
fmt.Scanln(&input)
conn.Write([]byte(input))
if input == "exit" || input == "quit" {
break
}
}
time.Sleep(4 * time.Second)
}
golang tcp
最新推荐文章于 2023-12-11 21:29:03 发布