Example #1
0
        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();
            }
        }
        public void Cerrar(IPEndPoint idCliente)
        {
            InfoDeUnCliente infoClienteActual = (InfoDeUnCliente)_clientes[idCliente];

            //Cierro la conexion con el cliente
            infoClienteActual.Task.Dispose();
            infoClienteActual.Socket.Close();
            _clientes.Remove(infoClienteActual);
        }
        private void CerrarThread(IPEndPoint idCliente)
        {
            InfoDeUnCliente infoClienteActual = (InfoDeUnCliente)_clientes[idCliente];

            try
            {
                infoClienteActual.Task.Dispose();
                _clientes.Remove(idCliente);
            }
            catch (Exception e)
            {
                _clientes.Remove(idCliente);
            }
        }
Example #4
0
        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();
            }
        }
        public string ObtenerDatos(IPEndPoint idCliente)
        {
            InfoDeUnCliente infoClienteSolicitado = (InfoDeUnCliente)_clientes[idCliente];

            return(infoClienteSolicitado.UltimosDatosRecibidos);
        }
        public void EnviarDatos(IPEndPoint idCliente, string datos)
        {
            InfoDeUnCliente cliente = (InfoDeUnCliente)_clientes[idCliente];

            cliente.Socket.Send(Encoding.ASCII.GetBytes(datos));
        }