Java - [Ayuda!] Envio de archivos por medio de Sockets.

   
Vista:
Imágen de perfil de Jesus

[Ayuda!] Envio de archivos por medio de Sockets.

Publicado por Jesus (1 intervención) el 02/01/2016 21:47:54
Buenas, Tengo un error que me ha estado carcomiendo por días y no sé que está mal, seguramente es una tontería...

Lo que intento hacer es un visor de archivos remoto, corre muy bien y todo, el problema es que al "descargar" un archivo por medio del cliente, sólo te deja hacer una vez esa acción y después deja de recibir datos el servidor y me bota al cliente. Les adjunto los archivos de mi proyecto por si quieren compilarlo ustedes.... Gracias de antemano!

Este es el codigo de la ventana cliente la cual manda un entero y después la ruta a descagar...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void Descarga() {
 
		try {
			oout.writeObject(2);
			oout.writeObject(CurrentFile.getAbsolutePath()+ "/" + JLFiles.getSelectedValue());
 
			byte[] receivedData = new byte[1024];
			int in;
			String file = JLFiles.getSelectedValue();
 
			//Para guardar fichero recibido
			bis = new BufferedInputStream(s.getInputStream());
			bos = new BufferedOutputStream(new FileOutputStream(file));
			while ((in = bis.read(receivedData)) != -1) {
				bos.write(receivedData,0,in);
			}
			bos.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			e.getMessage();
		}
	}

Este es el código del servidor, recordemos que el cliente le envía un entero el cual por medio del switch selecciona la opción.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
private void createConection() {
 
		try {
			server = new ServerSocket(NSer);
			s = server.accept();
 
			System.out.println("Servidor creado!");
			oout = new ObjectOutputStream(s.getOutputStream());
			oin = new ObjectInputStream(s.getInputStream());
 
			int op =(int) oin.readObject();
			String RFile = "";
 
			while(op!=5) {
 
				switch (op) {
 
				case 1:
					RFile = (String) oin.readObject();
					Recient = new File(RFile);
					oout.writeObject(Recient);
					break;
				case 2:
                                        //Esta es el case que no se si es la que está mal...
					RFile = (String) oin.readObject();
					Recient = new File(RFile);
					bis = new BufferedInputStream(new FileInputStream(Recient));
					bos = new BufferedOutputStream(s.getOutputStream());
					//Enviamos el fichero
					byteArray = new byte[8192];
					while ((in = bis.read(byteArray)) != -1){
						bos.write(byteArray,0,in);
					}
					bos.close();
 
					break;
				case 4:
					s = server.accept();
					oout = new ObjectOutputStream(s.getOutputStream());
					oin = new ObjectInputStream(s.getInputStream());
					break;
				default:
					break;
				}
 
				op =(int) oin.readObject();
			}
 
		} catch (Exception e) {
			// TODO Auto-generated catch block
			NSer++;
			createConection();
			e.printStackTrace();
 
		} finally {
 
			closeConection();
		}
	}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

[Ayuda!] Envio de archivos por medio de Sockets.

Publicado por Juan R. (94 intervenciones) el 04/01/2016 11:00:25
Buenas Jesus

Has probado en la clase CreateConnection a después de crear el socket poner la siguiente instrucción:

s.setSoLinger(true, 10);

Esta instrucción hace que al finalizar la conexión tengas 10 segundos para terminar de recibir datos. A lo mejor con esto te descarga los archivos de una sola pasada, si funciona y aún así se te queda colgando algún archivo, aumenta el tiempo (en vez de 10 ponle 20 o 30) a ver si así se soluciona.

Cuando tenga más tiempo, revisaré tu código mejor, pero si con eso se te soluciona mejor que mejor ;)

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar