/**
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.