Untitled
unknown
csharp
22 days ago
3.0 kB
0
Indexable
Never
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(); } } } } }
Leave a Comment