Ayuda con DataInputStream pls
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.
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.
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...
....
}
catch (IOException e) {
e.printStackTrace();
}
Ya nos contarás...
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.
Si se os ocurre una solucion mejor os agradeceria que lo escribierais en el foro.
Gracias por todo.
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.
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.