private void EsperarCliente() { while (true) { // Cuando se recibe la conexión, guardo la información del cliente // Guardo el socket que utilizó para mantener la conexión con el cliente var socket = listener.AcceptSocket(); // Se queda esperando la conexión de un cliente // Guardo el RemoteEndPoint, que utilizo para identificar al cliente // Casteo a IPEndPoint para poder obtener la IP y el puerto del cliente var endPoint = socket.RemoteEndPoint as IPEndPoint; // Creo un thread para que se encargue de escuchar los mensajes del cliente. // Uso una función anónima para que el thread tenga acceso a la ip del cliente actual var thread = new Thread(() => LeerSocket(endPoint)); thread.IsBackground = true; // Agrego la información del cliente al dictionary de clientes clientes[endPoint] = new InfoDeUnCliente() { Socket = socket, Thread = thread, }; // Disparo el evento NuevaConexion NuevaConexion?.Invoke(this, new ServidorEventArgs(endPoint)); // Inicio el thread encargado de escuchar los mensajes del cliente thread.Start(); } }
private void EsperarCliente() { while (true) { var cliente = default(InfoDeUnCliente); cliente.Socket = _tcpLsn.AcceptSocket(); _idClienteActual = (IPEndPoint)cliente.Socket.RemoteEndPoint; _clientes.Add(_idClienteActual, cliente); NuevaConexion?.Invoke(_idClienteActual); cliente.Task = Task.Run((() => LeerSocket())); } }
private void EsperarCliente() { while (true) { Socket socket = listener.AcceptSocket(); // Se queda esperando la conexión de un cliente IPEndPoint endPoint = socket.RemoteEndPoint as IPEndPoint; Thread thread = new Thread(() => LeerSocket(endPoint)); thread.IsBackground = true; clientes[endPoint] = new InfoDeUnCliente() { Socket = socket, Thread = thread, }; // Disparo el evento NuevaConexion NuevaConexion?.Invoke(this, new ServidorEventArgs(endPoint)); // Inicio el thread encargado de escuchar los mensajes del cliente thread.Start(); } }