If I am "infinitely" using the buffered reader
to wait for messages from the server, is this not pretty much the same as using ListenUDP
?
But if use ListenUDP
, then I've created another server ...
Is it bad practice to "infinitely" collect from this buffered reader
or is that in general how it is done with the client?
client.go
package main
import (
"fmt"
"time"
"net"
"sync"
"bufio"
)
func xyz(conn net.Conn, p []byte) {
rd := bufio.NewReader(conn)
for {
fmt.Printf("line
")
_, err := rd.Read(p)
if err == nil {
fmt.Printf("SERVER : %s
", p)
} else {
fmt.Printf("Some error %v
", err)
}
}
}
func main() {
var wg = &sync.WaitGroup{}
p := make([]byte, 2048)
conn, err := net.Dial("udp", "127.0.0.1:1234")
if err != nil {
fmt.Printf("Some error %v", err)
return
}
wg.Add(1)
go xyz(conn, p)
time.Sleep(2 * time.Second);
fmt.Fprintf(conn, "Give me a hash to work on ...")
time.Sleep(4 * time.Second)
wg.Wait()
}
server.go
package main
import (
"fmt"
"net"
)
func sendResponse(conn *net.UDPConn, addr *net.UDPAddr, hash string) {
_,err := conn.WriteToUDP([]byte("Hello, here is the hash - " + hash), addr)
if err != nil {
fmt.Printf("Couldn't send response %v", err)
}
}
func main() {
hash := "36";
p := make([]byte, 2048)
addr := net.UDPAddr{
Port: 1234,
IP: net.ParseIP("127.0.0.1"),
}
ser, err := net.ListenUDP("udp", &addr)
if err != nil {
fmt.Printf("Some error %v
", err)
return
}
for {
_, remoteaddr, err := ser.ReadFromUDP(p)
fmt.Printf("CLIENT : %v : %s
", remoteaddr, p)
if err != nil {
fmt.Printf("Some error %v", err)
continue
}
go sendResponse(ser, remoteaddr, hash)
}
}