Proto/echo.go
2023-09-21 19:10:27 +02:00

49 lines
1016 B
Go

package main
import (
"net"
"os"
"fmt"
)
type EchoServer struct {
port uint16
}
func NewEchoServer(port uint16) *EchoServer {
return &EchoServer{port}
}
func (s *EchoServer) Run() {
addr := fmt.Sprintf("0.0.0.0:%d", s.port)
server, err := net.Listen("tcp", addr)
if err != nil {
fmt.Println("Error listening:", err.Error())
os.Exit(1)
}
defer server.Close()
fmt.Println("EchoServer waiting for client...")
for {
connection, err := server.Accept()
if err != nil {
fmt.Println("Error accepting: ", err.Error())
os.Exit(1)
}
fmt.Println("client connected")
go s.processClient(connection)
}
}
func (s *EchoServer) processClient(connection net.Conn) {
buffer := make([]byte, 1024)
for {
mLen, err := connection.Read(buffer)
if err != nil {
fmt.Println("Error reading:", err.Error())
break
}
fmt.Printf("Received %d bytes\n", mLen)
_, err = connection.Write([]byte(buffer[:mLen]))
}
connection.Close()
}