From 457c742274f6e21a9ae8b09479e1c2e10d249d55 Mon Sep 17 00:00:00 2001 From: Yik Teng Hie Date: Fri, 2 Dec 2022 15:13:02 +0800 Subject: [PATCH] Add project files. --- MultiThreadTCP.sln | 25 +++++++ .../MultiThreadTCPServer.csproj | 10 +++ MultiThreadTCPServer/Program.cs | 2 + MultiThreadTCPServer/Server.cs | 74 +++++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 MultiThreadTCP.sln create mode 100644 MultiThreadTCPServer/MultiThreadTCPServer.csproj create mode 100644 MultiThreadTCPServer/Program.cs create mode 100644 MultiThreadTCPServer/Server.cs diff --git a/MultiThreadTCP.sln b/MultiThreadTCP.sln new file mode 100644 index 0000000..009f9d3 --- /dev/null +++ b/MultiThreadTCP.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33103.201 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MultiThreadTCPServer", "MultiThreadTCPServer\MultiThreadTCPServer.csproj", "{7C366206-F583-4E04-9715-AA36E8FFB3A8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7C366206-F583-4E04-9715-AA36E8FFB3A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C366206-F583-4E04-9715-AA36E8FFB3A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C366206-F583-4E04-9715-AA36E8FFB3A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C366206-F583-4E04-9715-AA36E8FFB3A8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {AB0227F1-F1EC-4BAB-B88B-D7B7DAB5E24E} + EndGlobalSection +EndGlobal diff --git a/MultiThreadTCPServer/MultiThreadTCPServer.csproj b/MultiThreadTCPServer/MultiThreadTCPServer.csproj new file mode 100644 index 0000000..74abf5c --- /dev/null +++ b/MultiThreadTCPServer/MultiThreadTCPServer.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/MultiThreadTCPServer/Program.cs b/MultiThreadTCPServer/Program.cs new file mode 100644 index 0000000..3751555 --- /dev/null +++ b/MultiThreadTCPServer/Program.cs @@ -0,0 +1,2 @@ +// See https://aka.ms/new-console-template for more information +Console.WriteLine("Hello, World!"); diff --git a/MultiThreadTCPServer/Server.cs b/MultiThreadTCPServer/Server.cs new file mode 100644 index 0000000..663bcf8 --- /dev/null +++ b/MultiThreadTCPServer/Server.cs @@ -0,0 +1,74 @@ +using System.Net; +using System.Net.Sockets; +using System.Text; + +namespace MultiThreadTCPServer +{ + class Server + { + TcpListener _server = null; + + public Server(string ip, int port) + { + IPAddress localAddr = IPAddress.Parse(ip); + _server = new TcpListener(localAddr, port); + _server.Start(); + StartListener(); + } + + private void StartListener() + { + try + { + while (true) + { + Console.WriteLine("Waiting for a connection..."); + TcpClient client = _server.AcceptTcpClient(); + Console.WriteLine("Connected!"); + + Thread t = new Thread(new ParameterizedThreadStart(HandleClient)); + t.Start(); + } + } + catch (SocketException e) + { + Console.WriteLine("SocketException: {0}", e); + _server.Stop(); + } + } + + private void HandleClient(object? obj) + { + TcpClient client = (TcpClient)obj; + var stream = client.GetStream(); + + string imei = String.Empty; + + string data = String.Empty; + + Byte[] bytes = new Byte[256]; + int i; + + try + { + while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) + { + string hex = BitConverter.ToString(bytes); + data = Encoding.ASCII.GetString(bytes, 0, i); + Console.WriteLine($"{data}: Received: {Thread.CurrentThread.ManagedThreadId}"); + + string str = "Hey Client!"; + Byte[] reply = System.Text.Encoding.ASCII.GetBytes(str); + stream.Write(reply, 0, reply.Length); + Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}: Sent: {str}"); + } + + } + catch (Exception e) + { + Console.WriteLine("Exception: {0}", e.ToString()); + client.Close(); + } + } + } +}