implemented tcp server

master
Jonas Arnold 3 years ago
parent 257b086495
commit db563460ba
  1. 8
      ProtocolTests.sln
  2. 112
      TcpTestApp/Program.cs
  3. 10
      TcpTestApp/TcpTestApp.csproj
  4. 2
      UdpTestApp/Program.cs

@ -7,7 +7,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SerialTestApp", "SerialTest
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UsbHidTestApp", "UsbHidTestApp\UsbHidTestApp.csproj", "{39995F3A-1305-4053-9A9C-3432C1FF25B6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UdpTestApp", "UdpTestApp\UdpTestApp.csproj", "{97751007-78CC-4356-9F17-F118BA9297FB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UdpTestApp", "UdpTestApp\UdpTestApp.csproj", "{97751007-78CC-4356-9F17-F118BA9297FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TcpTestApp", "TcpTestApp\TcpTestApp.csproj", "{AFDCE6F1-D0E8-42DA-B0D9-201958AC0BAD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -27,6 +29,10 @@ Global
{97751007-78CC-4356-9F17-F118BA9297FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{97751007-78CC-4356-9F17-F118BA9297FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{97751007-78CC-4356-9F17-F118BA9297FB}.Release|Any CPU.Build.0 = Release|Any CPU
{AFDCE6F1-D0E8-42DA-B0D9-201958AC0BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AFDCE6F1-D0E8-42DA-B0D9-201958AC0BAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AFDCE6F1-D0E8-42DA-B0D9-201958AC0BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AFDCE6F1-D0E8-42DA-B0D9-201958AC0BAD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

@ -0,0 +1,112 @@
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace TcpTestApp;
internal class Program
{
private static Thread? serverThread;
private static CancellationTokenSource? cts;
private static TcpListener? listener;
public static bool applicationQuitRequested { get; private set; }
static void Main(string[] args)
{
while (applicationQuitRequested == false)
{
Console.WriteLine($"----- TCP Server for Protocol Testing -----");
Console.WriteLine($"Command list:");
Console.WriteLine($"s = start server");
Console.WriteLine($"e = stop server");
Console.WriteLine($"q = quit");
var key = Console.ReadKey(true);
switch (key.Key)
{
// start server
case ConsoleKey.S:
Console.Write($"Write port number to listen on: ");
string? portString = Console.ReadLine();
int port;
if (portString == null ||
portString == "" ||
Int32.TryParse(portString, out port) == false)
{
Console.WriteLine($"Invalid port entered.");
break;
}
var ipEndPoint = new IPEndPoint(IPAddress.Any, port);
listener = new(ipEndPoint);
try
{
listener.Start();
}
catch (Exception ex)
{
Console.WriteLine($"Could not start TCP server. \n {ex}");
break;
}
cts = new CancellationTokenSource(); // reset token
serverThread = new Thread(() => HandleTcp(cts));
serverThread.Start();
Console.WriteLine("Started TCP server.");
break;
// stop server
case ConsoleKey.E:
cts?.Cancel();
serverThread?.Join();
serverThread = null;
listener?.Stop();
Console.WriteLine("Stopped TCP server.");
break;
// quit
case ConsoleKey.Q:
applicationQuitRequested = true;
break;
default:
Console.WriteLine($"{Environment.NewLine}Did not recognize key.. {Environment.NewLine}");
break;
}
}
}
static async void HandleTcp(CancellationTokenSource cts)
{
while (!cts.IsCancellationRequested)
{
try
{
using TcpClient handler = await listener!.AcceptTcpClientAsync(cts.Token);
if(handler != null)
{
Console.WriteLine($"Accepted connection from client {handler.Client.RemoteEndPoint}");
await using NetworkStream stream = handler.GetStream();
var message = $"Welcome to the test TCP server.\n Current Time: {DateTime.Now}";
var dateTimeBytes = Encoding.UTF8.GetBytes(message);
await stream.WriteAsync(dateTimeBytes);
Console.WriteLine($"Sent message to client: \"{message}\"");
}
}
catch(Exception ex)
{
listener?.Stop();
Console.WriteLine($"Listener was stopped because of exception: {ex}");
}
}
}
}

@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

@ -17,7 +17,7 @@ public class Program
{
while (applicationQuitRequested == false)
{
Console.WriteLine($"----- USB HID PROTOCOL TEST APP -----");
Console.WriteLine($"----- UDP PROTOCOL TEST APP -----");
Console.WriteLine($"Command list:");
Console.WriteLine($"s = start");
Console.WriteLine($"q = quit");

Loading…
Cancel
Save