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(); } } } }