diff --git a/csharp/Test/Program.cs b/csharp/Test/Program.cs
index 585098114a6ed3cb5009f0a6edd5a3ca4b834e62..4a752e8bd23e2a53a882e2d88dbcb31d88d3e273 100644
--- a/csharp/Test/Program.cs
+++ b/csharp/Test/Program.cs
@@ -1,61 +1,83 @@
-using System.Text;
+using System;
+using System.Net.Sockets;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
 using Core;
 using Newtonsoft.Json.Linq;
 
-namespace csharp.Test;
-
-public class Program
+namespace csharp.Test
 {
-    private static async Task Main(string[] args)
+    public class Program
     {
-        /*const int ControlPort = 20012;
-        const string ControlIP = "corelink.hsrn.nyu.edu"; //"corelink.hpc.nyu.edu"
-        const bool autoReconnect = false;
-        var username = "Testuser";
-        var password = "Testpassword";
-        var workspace = "Holodeck";
-        var protocol = "udp";
-        var datatype = "distance";
-
-        var exchange = new CorelinkDataXchgTcpProtocolManager(ControlIP, ControlPort,
-            (i, bytes, objec) => { Console.WriteLine(objec); });
-        await exchange.ConnectAsync();
-
-        Console.WriteLine("Testing the Tcp sender....");
-        var jsonObject = new JObject();
-        jsonObject["workspace"] = workspace;
-        jsonObject["protocol"] = protocol;
-        jsonObject["type"] = datatype;
-        jsonObject["metadata"] = "";
-        jsonObject["IP"] = ControlIP;
-        jsonObject["port"] = ControlPort;
-
-        var senderData = jsonObject.ToString();
-        Console.WriteLine($"Json data requested data {senderData}");
-
-        exchange.Send(0, Encoding.ASCII.GetBytes(senderData));
-
-        Thread.Sleep(10000);*/
-
-        TcpStreamExperimentation experimentation = new TcpStreamExperimentation("corelink.hsrn.nyu.edu");
-        await experimentation.SenderSetupTCP(0, 20012);
-        await experimentation.ReceiverSetupTCP(0, 20012, (i, bytes, arg3) =>
-        {
-            Console.WriteLine(arg3);
-        });
-        
-        if (experimentation.SenderStreams.TryGetValue(0, out var senderClient))
+        private static async Task Main(string[] args)
         {
-            var stream = senderClient.GetStream();
-            byte[] dataToSend = Encoding.UTF8.GetBytes("Hello, World!");
-            stream.Write(dataToSend, 0, dataToSend.Length);
-            Console.WriteLine("Data sent!");
+            const string ControlIP = "corelink.hsrn.nyu.edu";
+            const int ControlPort = 20012;
+            const string username = "Testuser";
+            const string password = "Testpassword";
+            const string workspace = "Holodeck";
+            const string protocol = "udp";
+            const string datatype = "distance";
+
+            TcpStreamExperimentation experimentation = new(ControlIP);
+            await experimentation.ReceiverSetupTCP(0, ControlPort, (streamId, bytes, response) =>
+            {
+                var responseData = Encoding.UTF8.GetString(bytes);
+                Console.WriteLine($"Received response on stream {streamId}: {responseData}");
+            });
+
+            await experimentation.SenderSetupTCP(0, ControlPort);
+            var authPayload = new JObject
+            {
+                ["action"] = "authenticate",
+                ["username"] = username,
+                ["password"] = password
+            };
+
+            if (experimentation.SenderStreams.TryGetValue(0, out var senderClient))
+            {
+                Console.WriteLine("Sending authentication request...");
+                await SendDataAsync(senderClient.GetStream(), authPayload.ToString());
+            }
+            else
+            {
+                Console.WriteLine("Sender stream not initialized!");
+                return;
+            }
+
+            Thread.Sleep(2000);
+            var workspacePayload = new JObject
+            {
+                ["action"] = "request_workspace",
+                ["workspace"] = workspace,
+                ["protocol"] = protocol,
+                ["type"] = datatype
+            };
+
+            Console.WriteLine("Requesting workspace access...");
+            if (experimentation.SenderStreams.TryGetValue(0, out senderClient))
+            {
+                await SendDataAsync(senderClient.GetStream(), workspacePayload.ToString());
+            }
+
+            Thread.Sleep(2000);
+
+            Console.WriteLine("Program completed.");
         }
-        else
+
+        private static async Task SendDataAsync(NetworkStream stream, string data)
         {
-            Console.WriteLine($"Sender stream with ID {0} not found.");
+            try
+            {
+                var dataBytes = Encoding.UTF8.GetBytes(data + "\n"); // Ensure newline termination for JSON payloads
+                await stream.WriteAsync(dataBytes, 0, dataBytes.Length);
+                Console.WriteLine($"Sent: {data}");
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine($"Error sending data: {ex.Message}");
+            }
         }
-
-        Thread.Sleep(10000);
     }
-}
\ No newline at end of file
+}