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); } }
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)); }