Solution 2: Working with TCP/IP and WebSocket
Let’s solve the challenge set in the previous lesson.
We'll cover the following...
Solution
Here is the concurrent TCP server (concTCP.go) that generates random numbers in a range that is given by the TCP client.
To run the client side, open a new terminal window and copy and paste the command below into it.
nc localhost 1234
The following playground contains the concurrent TCP server (concTCP.go) code:
package main
import (
"bufio"
"fmt"
"math/rand"
"net"
"strconv"
"strings"
"time"
)
func handleConnection(conn net.Conn) {
defer conn.Close()
r := bufio.NewReader(conn)
for {
fmt.Fprint(conn, ">> Enter a number or 'quit' to quit \n")
line, err := r.ReadString('\n')
if err != nil {
break
}
line = strings.TrimSpace(line)
if line == "quit" {
break
}
n, err := strconv.Atoi(line)
if err != nil {
fmt.Println("Invalid number")
continue
}
fmt.Println("Generating random number in range 0 to", n)
rand.Seed(time.Now().UnixNano())
fmt.Fprintln(conn, "Random number generated:", rand.Intn(n))
}
}
func main() {
ln, err := net.Listen("tcp", ":1234")
if err != nil {
panic(err)
}
defer ln.Close()
for {
conn, err := ln.Accept()
if err != nil {
panic(err)
}
go handleConnection(conn)
}
}
concTCP.go
Code explanation
Lines 13–15: The
handleConnection...
Ask