Solution 2: Working with TCP/IP and WebSocket
Let’s solve the challenge set in the previous lesson.
We'll cover the following...
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...