Ayuda con DataInputStream pls

jose
17 de Diciembre del 2003
A ver si podeis ayudarme ,el problema viene a la hora de leer de un Socket a traves del DataInputStream y guardar el contenido en un archivo ; el codigo seria algo asi :

s=new Socket(unhost,puertoServidor);
DataInputStream entrada=new DataInputStream(s.getInputStream());
******************************************
FileOutputStream fos=new FileOutputStream(es); // "es" es de tipo file
byte[] prueba=new byte[1024];
int cuenta=0;
try{
while((cuenta=entrada.read(prueba))!=-1){
fos.write(prueba,0,cuenta);
}
}catch(IOException e){}
el problema es que salta la IOException y no se porque ocurre,
a ver si podeis decirme cual es el fallo.
Gracias de antemano.

PaneB
17 de Diciembre del 2003
Lo suyo es que pongas alguna traza en la excepción e indiques el mensaje en el foro:

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

Ya nos contarás...

jose
17 de Diciembre del 2003
Bueno , pues he probado esa solucion y funciona, primero enviando el tamaño del archivo que quiero mandar y luego leyendo ese numero exacto de bytes.
Si se os ocurre una solucion mejor os agradeceria que lo escribierais en el foro.
Gracias por todo.

jose
17 de Diciembre del 2003
Ya he probado es idea y lo que me ha salido es lo siguiente:

java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.DataInputStream.read(DataInputStream.java:113)
at ClienteFTP.ClienteFTP.descargar(ClienteFTP.java:53)
at ClienteFTP.ClienteFTP.enviar(ClienteFTP.java:103)
at ClienteFTP.ClienteGUI.jButton1ActionPerformed(ClienteGUI.java:119)
at ClienteFTP.ClienteGUI.access$100(ClienteGUI.java:16)
at ClienteFTP.ClienteGUI$2.actionPerformed(ClienteGUI.java:56)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1817)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
at java.awt.Component.processMouseEvent(Component.java:5093)
at java.awt.Component.processEvent(Component.java:4890)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3598)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
at java.awt.Container.dispatchEventImpl(Container.java:1609)
at java.awt.Window.dispatchEventImpl(Window.java:1585)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)

Creo , por lo que me han comentado tambien ,es que el problema esta en que asi no hay forma de saber cuantos bytes hay para leer e intenta leer mas bytes de los que hay en el socket y por eso salta la IOException.
Una solucion podria ser enviar primero el tamaño del archivo y leer ese numero determinado de bytes
¿Que os parece?
De momento es lo que voy a intentar , ya os contare.
Gracias por todo.