예제 #1
0
        private void LeerSocket(IPEndPoint IP)
        {
            byte[]        buffer   = new byte[255];
            ClienteModelo cliente  = clientesDictionary[IP];
            bool          conexion = cliente.GetConexion();

            while (conexion)
            {
                try
                {
                    int  cantidadRecibida = cliente.GetSocket().Receive(buffer, buffer.Length, SocketFlags.None);
                    bool vacio            = cantidadRecibida > 0;
                    if (vacio)
                    {
                        string datosRecibido = Encoding.UTF8.GetString(buffer, 0, cantidadRecibida);
                        this.DatosRecibidos.Invoke(this, new servidorEvento(datosRecibido, IP));
                    }
                    else
                    {
                        this.ConexionTerminada.Invoke(this, new cambioConexion(IP));
                        conexion = false;
                    }
                }
                catch
                {
                    this.ConexionTerminada.Invoke(this, new cambioConexion(IP));
                    conexion = false;
                }
            }
            clientesDictionary.TryRemove(IP, out cliente);
        }
예제 #2
0
        public void EnviarDatosParticular(string datos, IPEndPoint ip)
        {
            ClienteModelo buscado = clientesDictionary.First(cliente => cliente.Key == ip).Value;

            if (buscado != null)
            {
                byte[] mensaje = Encoding.UTF8.GetBytes(datos);
                buscado.GetSocket().Send(mensaje);
            }
            else
            {
                throw new Exception($"no existe el cliente con ip: {ip}");
            }
        }