package main
import (
"fmt"
"net"
"time"
)
func Serve() {
l, err := net.Listen("tcp", ":8888")
if err != nil {
fmt.Println("err:", err.Error())
}
fmt.Println("listen ok")
for {
conn, err := l.Accept()
fmt.Println("accept new conn")
if err != nil {
fmt.Println("accept err:", err.Error())
return
}
go ProcessConn(conn)
}
}
func ProcessConn(c net.Conn) {
for {
c.SetReadDeadline(time.Now().Add(5 * time.Second))
buf := make([]byte, 1025)
_, err := c.Read(buf)
if err != nil {
fmt.Println("read err:", err.Error())
return
}
fmt.Println("buf:", string(buf))
}
}
func ProcessConnReDDL(c net.Conn) {
c.SetReadDeadline(time.Now().Add(1 * time.Second))
time.Sleep(2 * time.Second)
for {
c.SetReadDeadline(time.Now().Add(5 * time.Second))
buf := make([]byte, 1025)
_, err := c.Read(buf)
if err != nil {
fmt.Println("read err:", err.Error())
return
}
fmt.Println("buf:", string(buf))
}
}
func ProcessConnDDL(c net.Conn) {
c.SetReadDeadline(time.Now().Add(1 * time.Second))
for {
c.SetReadDeadline(time.Now().Add(1 * time.Second))
time.Sleep(3 * time.Second)
buf := make([]byte, 1025)
_, err := c.Read(buf)
if err != nil {
fmt.Println("read err:", err.Error())
return
}
fmt.Println("buf:", string(buf))
}
}
func ProcessConnWithDDl(c net.Conn) {
for {
c.SetReadDeadline(time.Now().Add(5 * time.Second))
buf := make([]byte, 1025)
_, err := c.Read(buf)
fmt.Println("buf:", string(buf))
if err != nil {
fmt.Println("read err:", err.Error())
return
}
time.Sleep(10 * time.Second)
}
}
func Client() {
dial, err := net.Dial("tcp", ":8888")
if err != nil {
fmt.Println("dial err:", err.Error())
return
}
dial.Write([]byte("xxx"))
dial.Close()
fmt.Println("client close")
}
func RSTClient() {
dial, err := net.Dial("tcp", ":8888")
if err != nil {
fmt.Println("RST dial err:", err.Error())
return
}
dial.Write([]byte("xxx"))
time.Sleep(3 * time.Second)
dial.(*net.TCPConn).SetLinger(0)
dial.Close()
fmt.Println("RST client close")
}
func DDlClient() {
dial, err := net.Dial("tcp", ":8888")
if err != nil {
fmt.Println("RST dial err:", err.Error())
return
}
dial.Write([]byte("xxx"))
dial.(*net.TCPConn).SetDeadline(time.Now().Add(1 * time.Second))
time.Sleep(10 * time.Second)
}
func SleepClient() {
dial, err := net.Dial("tcp", ":8888")
if err != nil {
fmt.Println("RST dial err:", err.Error())
return
}
dial.Write([]byte("xxx"))
time.Sleep(30 * time.Second)
}
func WriteClient() {
dial, err := net.Dial("tcp", ":8888")
if err != nil {
fmt.Println("RST dial err:", err.Error())
return
}
for {
dial.Write([]byte("xxx"))
time.Sleep(3 * time.Second)
}
}
func main() {
go Serve()
time.Sleep(3 * time.Second)
fmt.Println("==========DDl")
go DDlClient()
time.Sleep(30 * time.Second)
}