Skip to content

Instantly share code, notes, and snippets.

@ego008
Last active April 26, 2018 08:30
Show Gist options
  • Save ego008/5333cf4e56d8b5a332ba38ab15a18c0d to your computer and use it in GitHub Desktop.
Save ego008/5333cf4e56d8b5a332ba38ab15a18c0d to your computer and use it in GitHub Desktop.
Simple tcp server & auto reconnect client
package main
import (
"bufio"
"log"
"net"
"time"
)
func main() {
var addr = "localhost:9999"
var conn net.Conn
var err error
for {
conn, err = net.Dial("tcp", addr)
if err != nil {
log.Println("Failed to connect to test server")
time.Sleep(3 * time.Second)
continue
}
break
}
for {
reader := bufio.NewReader(conn)
for {
message, err := reader.ReadString('\n')
if err != nil {
log.Println("read err", err)
conn.Close()
break
}
_, err = conn.Write([]byte(message))
if err != nil {
conn.Close()
break
}
log.Println("rev ", message[:len(message)-1])
time.Sleep(3 * time.Second)
}
/*
// use ReadLine
reader = bufio.NewReader(conn)
btsSk = make([]byte, 0)
for {
line, more, err := reader.ReadLine()
if len(line) > 0 {
btsSk = append(btsSk, line...)
if !more {
break
}
}
if err != nil {
log.Println("ReadLineBytes err : ", err)
//return
break
}
}
log.Println("rev ", string(btsSk))
conn.Write([]byte(string(btsSk)))
btsSk = btsSk[:0]
time.Sleep(3*time.Second)
*/
// try to reconnect
for {
conn, err = net.Dial("tcp", addr)
if err != nil {
log.Println("Failed to connect to test server")
time.Sleep(3 * time.Second)
continue
}
break
}
}
log.Println("done")
}
package main
import (
"github.com/firstrow/tcp_server"
"log"
"strconv"
)
func main() {
var i int
server := tcp_server.New("localhost:9999")
server.OnNewClient(func(c *tcp_server.Client) {
// new client connected
log.Println("new client in come")
// lets send some message
c.Send("Hello\n")
})
server.OnNewMessage(func(c *tcp_server.Client, message string) {
// new message received
c.Send("Hello " + strconv.Itoa(i) + "\n")
i += 1
log.Println("rev " + message[:len(message)-1])
})
server.OnClientConnectionClosed(func(c *tcp_server.Client, err error) {
// connection with client lost
log.Println("client close")
})
server.Listen()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment