Untitled
unknown
csharp
2 years ago
3.0 kB
12
Indexable
namespace Server
{
public class Program
{
private static TcpListener _tcpListener;
private static List<ClientInfo> _clients;
static void Main(string[] args)
{
_clients = new List<ClientInfo>();
StartServer();
Console.ReadLine();
}
public static void StartServer()
{
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
int port = 8888;
_tcpListener = new TcpListener(ipAddress, port);
_tcpListener.Start();
Console.WriteLine("Listening on port 8888.");
while (true)
{
TcpClient client = _tcpListener.AcceptTcpClient();
Console.WriteLine("Client was connected.");
NetworkStream stream = client.GetStream();
byte[] nameBuffer = new byte[4096];
int nameBytesRead = stream.Read(nameBuffer, 0, 4096);
string nameClient = Encoding.ASCII.GetString(nameBuffer, 0, nameBytesRead);
ClientInfo clientInfo = new ClientInfo(nameClient, client);
_clients.Add(clientInfo);
Thread clientThread = new Thread(HandleClient);
clientThread.Start(_clients[_clients.Count - 1]);
}
_tcpListener.Stop();
}
public static void HandleClient(object clientInfoObject)
{
ClientInfo client = (ClientInfo) clientInfoObject;
TcpClient tcpClient = client.Client;
NetworkStream stream = tcpClient.GetStream();
byte[] message = new byte[4096];
int bytesRead;
while (true)
{
try
{
bytesRead = stream.Read(message, 0, message.Length);
} catch
{
break;
}
if (bytesRead == 0) {
break;
}
string clientMessage = Encoding.ASCII.GetString(message, 0, bytesRead);
Console.WriteLine($"{client.Name}: {clientMessage}");
BroadcastMessage(clientMessage, tcpClient);
}
_clients.Remove(client);
Console.WriteLine($"{client.Name} disconnected.");
tcpClient.Close();
}
private static void BroadcastMessage(string message, TcpClient client)
{
foreach (ClientInfo clientInfo in _clients)
{
if (clientInfo.Client != client)
{
NetworkStream stream = clientInfo.Client.GetStream();
byte[] data = Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
stream.Flush();
}
}
}
}
}Editor is loading...
Leave a Comment