Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - manuelfer

Páginas: [1]
1
Hola, tengo una duda.. Me podrían decir como hay que hacer para buscar archivos según la extension como pide el ejercicio? muchas gracias!!!

Armar una aplicación cliente que busque todos los archivos que sean imágenes en el directorio local con las siguientes extensiones (.jpg, .bmp, .png, .gif) y que envíe la mas grande de cada tipo a un servidor que esta escuchando en una IP particular y en el puerto 7777. Si no llegara a encontrar algún archivo con alguna de las extensiones requeridas, deberá conectarse al servidor y pedir dicho archivo.

2
Buenas a todos, tengo una duda que no se como y que se tiene que cerrar en un programa donde tiene Socket, ServerSocket, Entrada y salida de datos y buffer's.

Acá dejo una parte mi programa para que vean como cierro yo los socket y demás, quiero saber si estoy en lo correcto o hay que corregir algo, ya que tengo que improvisar mucho porque me ha saltado muchas excepciones y quiero saber la forma correcta. Muchas gracias !!


Código: [Seleccionar]
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Servidor {

private static final int PUERTO = 8080;

public static void main(String[] args) {

try {
ServerSocket server = new ServerSocket (PUERTO);
Socket cliente = server.accept();
DataInputStream dis = new DataInputStream (cliente.getInputStream());
DataOutputStream dos = new DataOutputStream (cliente.getOutputStream());
BufferedInputStream bis = null;
BufferedOutputStream bos = null;

try {

String nombreArchivo = dis.readUTF();
System.out.println("El cliente pidio que se busque el archivo: "+nombreArchivo);

File file = new File ("/Users/ignaciolopez/Documents/"+nombreArchivo);

System.out.println("Se encontro el archivo: "+file.getName()+" - Peso: "+file.length());

int tamano = (int) file.length();
dos.writeInt(tamano);
dos.writeUTF(file.getName());

bis = new BufferedInputStream (new FileInputStream (file));
    bos = new BufferedOutputStream (cliente.getOutputStream());

byte buffer [] = new byte [tamano];

for (int i =0; i<buffer.length; i++){
buffer[i] = (byte) bis.read();
}

for (int i = 0; i < buffer.length; i++){
bos.write(buffer[i]);
}

bos.flush();

} finally {
server.close();
cliente.close();
dis.close();
dos.close();
bis.close();
bos.close();
}

} catch (IOException e) {
e.printStackTrace();

}

}

}

4
Me anda ahora, proba vos a ver si te funciona tmb.

Productor
Código: [Seleccionar]
import java.util.Random;

public class Productor extends Thread {
private Pila pila;
private String alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private char c;
private Random random = new Random();
private int cant, ms;


public Productor (Pila pila, int cant, int ms){
this.pila = pila;
this.cant = cant;
this.ms = ms;

}

public Productor (Pila p){
this.pila = p;
}

public void run (){
for (int i = 1; i < cant+1; i++){
c = alfabeto.charAt(random.nextInt(26));
System.out.println("Productor "+i+": "+c);
pila.poner(c);

try {
Thread.sleep(ms);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}
}

Consumidor
Código: [Seleccionar]
public class Consumidor extends Thread {
private Pila pila;
private int cant,ms;
   
public Consumidor (Pila pila, int cant, int ms){
this.pila = pila;
this.cant = cant;
this.ms = ms;

}

public void run (){
char c;
for (int i = 1 ; i < cant + 1; i++){
c = pila.sacar();
System.out.println("Consumidor "+i+": "+c);

try {
Thread.sleep(ms);
} catch (InterruptedException e) {
e.printStackTrace();
}
}



}

}

Pila
Código: [Seleccionar]
import java.util.ArrayList;



public class Pila {
ArrayList <Character> pila = new ArrayList <Character>();
private char c;

public synchronized  char sacar(){

if(pila.size()==0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

c = pila.remove(0);
notify();

return c;
}

public synchronized void poner(char c){

if (pila.size()!=0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
pila.add(c);
notify();

}

}

Main
Código: [Seleccionar]
public class Main {
public static void main(String[] args){
Pila pila = new Pila();

Productor pr = new Productor(pila,10, 500);
Consumidor cs = new Consumidor (pila,10,500);

pr.start();
cs.start();

}
}

5
No lo especifica, pero se supone que si, porque nunca puede salir primero el consumidor y despues el productor. No tendría coherencia

6
Claro, pero como tengo que pasar por parámetros la cantidad de productor y consumidor que quiero, saque el for del main los puse en cada hilo, y me pasa lo mismo, que cuando salen al mismo tiempo (ósea en 400ms), vuelvo a lo mismo de antes, todo sin sincronizar me sale

7
Claro, yo lo he hecho con sleep, Productor 300ms y consumidor 600ms, para que primero largue el productor siempre. Pero desp el ejercicio dice que tienen que largar los 2 en 400 ms por defecto.

8
Perfecto lorenzo, hay un problema que me olvide de decirte. El ejercicio pide que por parámetro le pidas a productor crear X cantidad de caracteres y a consumidor tb. Ej:
Consumidor cs = new Consumidor (pila, 5);
Productor p = new Productor (pila, 5);

Yo lo había pensado en pasarle el 5 por parámetro al for, pero el for esta en el main..

9
Ya esta, ya me funciono perfecto!! Gracias!!

10
Muchísimas gracias nuevamente, copie tal cual y no me imprime, estoy viendo que es lo que me falta y no me estoy dando cuenta..

11
Muchísimas gracias !!!! , perdon por mi ignorancia pero que diferencias hay entre Stack y ArrayList?

12
Sisi, lo he usado a notify () y wait (), pero sin embargo no me funciono. He estado días intentando y no.. si me puedes solucionar el problema te lo agradecería !!

13
Hola, como andan a todos. Tengo una duda de este problemas, que el productor tiene que generar caracteres aleatorios (la cantidad que quiera) y el consumidor lo tiene que comer.
El problema es que cuando los dos hilos (consumidor y productor) empiezan al mismo tiempo, hay aveces que primero sale el Consumidor, y segundo el Productor (Cosa que nunca puede pasar porque primero tiene que el productor producir un carácter y después si o si el consumidor.

Ejemplo correcto:
Productor 1: R
Consumidor 1: R
Productor 2: J
Consumidor 2: J
........
....

Ejemplo lo que me pasa aveces a mi:
Consumidor 1: R
Productor 1: R
Consumidor 2: K
Productor 2: K
......
...

Acá va el código para que puedan ver como lo estoy haciendo hasta el momento.


Productor.java
Código: [Seleccionar]
import java.util.Random;

public class Productor extends Thread {
private Pila pila;
private String alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private char c;
private Random random = new Random();


public Productor (Pila pila, int cant, int ms){
this.pila = pila;

}

public Productor (Pila p){
this.pila = p;;
}

public void run (){
for (int i = 1; i < 11 ; i++){
c = alfabeto.charAt(random.nextInt(26));
pila.poner(c);
System.out.println("Productor "+i+": "+c);
}

}
}

Consumidor.java
Código: [Seleccionar]
public class Consumidor extends Thread {
private Pila pila;


   
public Consumidor (Pila pila){
this.pila = pila;
}

public void run (){


for(int i = 1; i < 11; i++){
char c;
c = pila.sacar();
System.out.println("Consumidor "+i+": "+c);
}

}

}

Pila.java
Código: [Seleccionar]
import java.util.ArrayList;


public class Pila {
ArrayList <Character> pila = new ArrayList<Character>();
private char c;

public synchronized  char sacar(){

if(pila.size()==0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

c = pila.remove(0);
notify();

return c;
}

public synchronized char poner(char c){
if (pila.size()!=0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

pila.add(c);
notify();

return c;

}

}

Main.java

Código: [Seleccionar]
public class Main {
public static void main(String[] args) {
Pila pila = new Pila();

Productor pr = new Productor(pila);
Consumidor cs = new Consumidor (pila);
pr.start();
cs.start();


}
}

Conclusion: No me sale, que primero SIEMPRE, salga el productor y después el consumidor. Muchas gracias

14
Hola simplemente recorrer la colección con un bucle y mostrar los atributos. Si sigues el curso que te he indicado serás capaz de resolverlo sin problemas. En este ejercicio del curso puedes ver un ejemplo de cómo hacerlo - > https://www.aprenderaprogramar.com/foros/index.php?topic=2514.0

Salu2

Ya pude mostrar los mensajes.. Me funciono !! Ahora.. como hago para eliminar el mensaje mas viejo ? en el link que me pasaste no esta como hacer!!

Desde ya muchas gracias

15
Si si, lo vi, hice este bucle

Código: [Seleccionar]
  public void listaMensajes(){
        for (int i = 0; i < lista.size(); i++) {
            System.out.println("Mensaje "+(i+1)+" : "+lista.get(i));
        }
    }

pero me compila esto:

Citar
Mensaje 1 : Mensaje@659e0bfd
Mensaje 2 : Mensaje@2a139a55
Mensaje 3 : Mensaje@15db9742

yo quisiera que me compile asi:

Citar
Mensaje 1 : Id: 18-8fg2-87hg // Prioridad: BAJA // Fecha: 14.8.15 // Hora: 14.32.54
Mensaje 2 : Id: 66-785Y-32g // Prioridad: MEDIA // Fecha: 6.3.15 // Hora: 19.15.55
Mensaje 3 : Id: 92-555j7-32g // Prioridad: ALTA // Fecha: 4.9.15 // Hora: 11.25.65
Mensaje 4 : Id: 92-555j7-32g // Prioridad: BAJA // Fecha: 5.8.15 // Hora: 8.55.95

16
Hola, muchisimas gracias por tu ayuda.. Lo pude eliminar el mensaje de prioridad baja al llegar al limite en el dia de ayer antes de leer el foro.

Lo hice de esta forma:

ListaMensajes:

Código: [Seleccionar]
import java.util.ArrayList;

public class ListaMensajes{
ArrayList<Mensaje> lista = new ArrayList<Mensaje>();

public ListaMensajes (){

}

public void agregarMensajes(Mensaje mensaje) {
lista.add(mensaje);

}

public void cantidadMensajes() {
System.out.println(lista.size());

}

public void borrarMensaje() {

for (int i = 0; i < lista.size(); i++) {
if (lista.get(i).getPrio() == Prioridad.BAJA) {
lista.remove(lista.get(i));

}
}
}


}

Test:

Código: [Seleccionar]
public class Test {

public static void main(String[] args) {

ListaMensajes tester = new ListaMensajes();
Mensaje m1 = new Mensaje("18-8fg2-87hg", Prioridad.BAJA, "14/8/15",
"14:32 AM.");
Mensaje m2 = new Mensaje("92-555j7-32g", Prioridad.ALTA, "4/9/15",
"11:25 AM.");
Mensaje m3 = new Mensaje("66-785Y-32g", Prioridad.MEDIA, "6/3/15",
"22:15 AM.");
Mensaje m4 = new Mensaje("92-555j7-32g", Prioridad.ALTA, "4/9/15",
"11:25 AM.");

tester.agregarMensajes(m1);
tester.agregarMensajes(m2);
tester.agregarMensajes(m3);
tester.agregarMensajes(m4);

System.out.print("Cantidad de mensajes: ");
tester.cantidadMensajes();

System.out.println(">>(FILTRO)<<");
//borrar mensaje de prioridad baja al llegar al limite
tester.borrarMensaje();

System.out.print("Cantidad de mensajes: ");
tester.cantidadMensajes();

}

}

Al compilar.....:

Citar
Cantidad de mensajes: 4
>>(FILTRO)<<
Cantidad de mensajes: 3

Mi duda es.. no le puedo encontrar la forma para que me muestre digamos los 4 mensajes con sus respectivos atributos (id, prioridad, fecha, etc) antes de pasarle el filtro, y cuando le pase el filtro me muestre los 3 mensajes que quedaron (ya que al pasarle el filtro se elimino un mensaje de prioridad baja).. Como tendria que hacer?

17
El enunciado es el siguiente:

TALLER DE PROGRAMACIÓN I

Ejercicio 1

Necesitamos implementar una caché de objetos de tipo Mensaje en un servidor. Los mensajes tienen un id, un texto (el mensaje propiamente dicho), una prioridad asociada (la cual debe ser implementada utilizando enums), una fecha y hora de recepción.

El servidor de caché tiene un límite de la cantidad de objetos que puede guardar, una vez alcanzado ese límite, y frente a la llegada de otro mensaje, el mismo procede a descartar el de menor prioridad y entre los de menor prioridad el más viejo de todos.

Si la condición anterior se repitiera 3 veces el servidor debe lanzar una excepción verificada informando del problema.

El usuario de la caché puede realizar dos operaciones:

1) Pedir todos los objetos de una determinada prioridad

2) Pedir una Set de todos los elementos ordenados por prioridad


Ejercicio 2


Modifique el ejercicio anterior para que la caché pueda funcionar con otros elementos además del Mensaje y que sea validado en tiempo de compilación.



Les muestro lo que hice, y luego le digo en que parte me quede.

Código: [Seleccionar]
public class Mensaje {

private String id;
private Prioridad prio;
private String fecha;
private String hora;

public Mensaje (String id, Prioridad prio, String fecha, String hora) {

this.id = id;
this.prio = prio;
this.fecha = fecha;
this.hora = hora;

}

public String getId () {
return id;
}

public Prioridad getPrio () {
return prio;
}

public String getFecha () {
return fecha;
}

public String getHora () {
return hora;
}


}


Código: [Seleccionar]
import java.util.ArrayList;
public class Menu {
ArrayList <Mensaje> lista = new ArrayList <Mensaje> ();

public Menu () {

}

public void agregarMensajes (Mensaje m) {
lista.add (m);
}

public void cantidadMensajes (){
System.out.println(lista.size ());
}

public void borrarMensajes (){
int limite, cant;
cant = lista.size ();
limite = 3;
if (cant == limite){
lista.remove (Prioridad.BAJA);
}
}

 }


Código: [Seleccionar]
public enum Prioridad {
BAJA, MEDIA, ALTA;

}


Código: [Seleccionar]
public class Test {

public static void main(String[] args) {

Menu tester = new Menu ();
Mensaje m1 = new Mensaje ("18-8fg2-87hg",Prioridad.BAJA,"14/8/15","14:32 AM.");
Mensaje m2 = new Mensaje ("92-555j7-32g",Prioridad.ALTA,"4/9/15","11:25 AM.");
Mensaje m3 = new Mensaje ("66-785Y-32g",Prioridad.MEDIA,"6/3/15","22:15 AM.");
Mensaje m4 = new Mensaje ("92-555j7-32g",Prioridad.ALTA,"4/9/15","11:25 AM.");

tester.agregarMensajes (m1);
tester.agregarMensajes (m2);
tester.agregarMensajes (m3);
tester.agregarMensajes (m4);

tester.cantidadMensajes ();

tester.borrarMensajes();

tester.cantidadMensajes();
}
}

Yo hice hasta ahi, me quede en como borrar el mensaje que tenga la PRIORIDAD.BAJA... Nose como hacer para que el mensaje tenga la prioridad baja, al excederse del limite de 3 mensajes se elimine. Me podrian ayudar como hacer?


Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".