You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.1 KiB
C#

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