From deb52470e54f8b019029b36bb898a85358544ee5 Mon Sep 17 00:00:00 2001 From: DirtyDuckEUW Date: Thu, 29 May 2025 04:30:53 +0200 Subject: [PATCH] First commit --- Client.go | 44 ++++++++++++++++++++++++++++++++++++++++ NetworkStats.go | 31 ++++++++++++++++++++++++++++ Server.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ build.cmd | 2 ++ go.mod | 3 +++ 5 files changed, 134 insertions(+) create mode 100644 Client.go create mode 100644 Server.go create mode 100644 build.cmd create mode 100644 go.mod diff --git a/Client.go b/Client.go new file mode 100644 index 0000000..00fc0b4 --- /dev/null +++ b/Client.go @@ -0,0 +1,44 @@ +package main + +import ( + "fmt" + "net" + "strconv" + "time" +) + +const PAYLOAD = "Test data" + +func StartClient() net.Conn { + conn := SetupClient(HOST, PORT) + + return conn +} + +func SetupClient(host string, port string) net.Conn { + // Connect to the server + conn, err := net.Dial("tcp", host+":"+port) + if err != nil { + fmt.Println(err) + return nil + } + + SendData(conn) + + return conn +} + +func SendData(conn net.Conn) { + counter := 0 + + for counter < 10 { + // Send some data to the server + _, err := conn.Write([]byte(PAYLOAD + " " + strconv.Itoa(counter))) + if err != nil { + fmt.Println(err) + return + } + counter++ + time.Sleep(100 * time.Millisecond) + } +} diff --git a/NetworkStats.go b/NetworkStats.go index e69de29..c34ae7e 100644 --- a/NetworkStats.go +++ b/NetworkStats.go @@ -0,0 +1,31 @@ +package main + +import ( + "fmt" + "net" + "time" +) + +const HOST = "localhost" +const PORT = "8080" + +// Hello returns a greeting for the named person. +func main() { + + go startServer() + time.Sleep(1 * time.Second) + client := StartClient() + + closeConnection("Client", client) + + time.Sleep(1 * time.Second) +} + +func log(msg string) { + fmt.Println(time.Now().Format(time.RFC822) + " " + msg) +} + +func closeConnection(id string, conn net.Conn) { + log(id + " connection closed: " + conn.LocalAddr().String()) + conn.Close() +} diff --git a/Server.go b/Server.go new file mode 100644 index 0000000..0be9d34 --- /dev/null +++ b/Server.go @@ -0,0 +1,54 @@ +package main + +import ( + "fmt" + "net" +) + +func startServer() net.Conn { + return setupServer(PORT) +} + +func setupServer(port string) net.Conn { + // Listen for incoming connections on port 8080 + ln, err := net.Listen("tcp", ":"+port) + if err != nil { + log(err.Error()) + return nil + } + + // Accept incoming connections and handle them + for { + conn, err := ln.Accept() + if err != nil { + log(err.Error()) + continue + } + + // Handle the connection in a new goroutine + go handleConnection(conn) + return conn + } + +} + +func handleConnection(conn net.Conn) { + // Close the connection when we're done + defer closeConnection("Server", conn) + + for { + // Read incoming data + buf := make([]byte, 1024) + + _, err := conn.Read(buf) + if err != nil { + //read = false + log(err.Error()) + return + } + + // Print the incoming data + fmt.Printf("Received: %s \n", buf) + } + +} diff --git a/build.cmd b/build.cmd new file mode 100644 index 0000000..b353e6e --- /dev/null +++ b/build.cmd @@ -0,0 +1,2 @@ +go mod tidy +go build \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..6f8e881 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module networkstats + +go 1.24.3