elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problemas (bloqueado) con socket en java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas (bloqueado) con socket en java  (Leído 1,957 veces)
bdoX

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Problemas (bloqueado) con socket en java
« en: 15 Junio 2014, 01:52 am »

Estimados:

Tengo un problema con un envío de ficheros, el problema es que el socket o hilo, en realidad no se, se bloquea. esta es la clase que usa el cliente y el servidor para el envio y recepción de ficheros. Dejo en claro que esto solo envía ficheros de textos. La verdad es que no tengo problemas al enviar o recibir un fichero de texto por localhost, el problema viene cuando uso internet. Solo logro enviar y recibir textos como por ejemplo el nombre del usuario, dirección, cosas así. Alguien tendría la amabilidad de ayudarme por favor.

Pd: Es un servidor que gestiona multiples clientes. Estas funciones son usadas el metodo run().

El servidor recibe 2 archivos, y responde con un archivo.

Código
  1. package Mensaje;
  2.  
  3. import java.io.*;
  4. import java.net.*;
  5. import java.util.*;
  6. import java.util.StringTokenizer;
  7. import java.util.logging.Level;
  8. import java.util.logging.Logger;
  9.  
  10. /**
  11.  * Mensaje para pedir un fichero.
  12.  */
  13. public class DameFichero
  14. {
  15.    public Socket socket;
  16.  
  17.    public DameFichero(Socket socket)
  18.    {
  19.        this.socket = socket;
  20.    }
  21.  
  22.    public String leerArchivoNotas(String nombreFileNotas)
  23.    {
  24.        File archivo;
  25.        String linea;
  26.        FileReader fr = null;
  27.        BufferedReader br = null;
  28.        FileWriter archivoResultado;
  29.        PrintWriter pw = null;
  30.  
  31.        try
  32.        {
  33.            // Apertura del fichero y creacion de BufferedReader para poder
  34.            // hacer una lectura comoda (disponer del metodo readLine()).
  35.            archivo = new File (nombreFileNotas);
  36.  
  37.            fr = new FileReader (archivo);
  38.            br = new BufferedReader(fr);
  39.            archivoResultado = new FileWriter("resul_"+nombreFileNotas);
  40.            pw = new PrintWriter(archivoResultado);
  41.  
  42.            // Lectura del fichero
  43.  
  44.            int contador = 0;
  45.  
  46.            //leemos las lineas que no nos sirven para calcular las notas
  47.            linea=br.readLine();
  48.            linea=br.readLine();
  49.            linea=br.readLine();//en esta linea los nombres de las columnas
  50.  
  51.            pw.println(linea+"\tPromedio_final");// le agregamos una ultima colum
  52.  
  53.            while((linea=br.readLine())!=null)
  54.            {
  55.                try
  56.                {
  57.                    //filtramos por tokens
  58.                    StringTokenizer st = new StringTokenizer(linea,"\t");
  59.                    float C1, C2, C3, NE;
  60.                    //quitamos los tokens que no nos sirven
  61.                    for (int i = 0; i < 3; i++)
  62.                        st.nextToken();
  63.  
  64.                    C1 = Float.parseFloat(st.nextToken());
  65.                    C2 = Float.parseFloat(st.nextToken());
  66.                    C3 = Float.parseFloat(st.nextToken());
  67.                    NE = Float.parseFloat(st.nextToken());
  68.                    //escribimos la nota al final de cada columna
  69.                    pw.println(linea+"\t"+Redondear(getNotaFinal(C1,C2,C3,NE)));
  70.                }
  71.                catch (Exception e)
  72.                {
  73.                    System.out.println("problemas con el numero flotante");
  74.                    e.printStackTrace();
  75.                }
  76.            }
  77.        }
  78.        catch(Exception e){
  79.            e.printStackTrace();
  80.        }
  81.        finally
  82.        {
  83.            // En el finally cerramos el fichero, para asegurarnos
  84.            // que se cierra tanto si todo va bien como si salta
  85.            // una excepcion.
  86.            try
  87.            {
  88.                fr.close();
  89.                br.close();
  90.                pw.close();
  91.            }
  92.            catch (Exception e2){
  93.                e2.printStackTrace();
  94.            }
  95.        }
  96.  
  97.        return "resul_"+nombreFileNotas;
  98.    }
  99.  
  100.  
  101.  
  102.    public void EnviarArchivo(String nombreArchivo)
  103.    {
  104.        PrintWriter pw1 = null;
  105.        BufferedReader br1 = null;
  106.  
  107.        try
  108.        {
  109.            // Creamos el archivo que vamos a enviar
  110.            File archivo = new File(nombreArchivo);
  111.  
  112.            if(!archivo.exists())
  113.            {
  114.                System.out.println("El archivo a "+nombreArchivo+" no existe");
  115.                return ;
  116.            }
  117.            // Obtenemos el tamaño del archivo
  118.            int tamañoArchivo = (int)archivo.length();
  119.            File filenombreArchivo = new File(nombreArchivo);
  120.  
  121.            // Creamos flujo de entrada para realizar la lectura del archivo en bytes
  122.            FileReader fr = new FileReader(filenombreArchivo);
  123.            String buffer;
  124.            int i = 1;
  125.  
  126.            pw1 = new PrintWriter(this.socket.getOutputStream(), true);
  127.            br1 = new BufferedReader(fr);
  128.  
  129.            System.out.println("El tamaño del archivo a enviar: "+tamañoArchivo);
  130.            /*
  131.             synchronized (pw1)
  132.             {
  133.             */
  134.            while((buffer=br1.readLine())!=null)
  135.            {
  136.                pw1.println(buffer);
  137.                System.out.println(i+") "+buffer.length());
  138.  
  139.                try {
  140.                    Thread.sleep(100);//le puse este sleep para depurar
  141.                } catch (InterruptedException ex) {
  142.                    System.out.println("Excepcion del sleep()");
  143.                    //Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex);
  144.                }
  145.                i++;
  146.            }
  147.            //    pw1.notify();
  148.            //}
  149.            fr.close();
  150.        }
  151.        catch(IOException e)
  152.        {
  153.            System.err.println(e.toString());
  154.        }
  155.        finally
  156.        {
  157.            try
  158.            {
  159.                br1.close();
  160.                //pw1.close();
  161.            }
  162.            catch (IOException ex) {
  163.                Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex);
  164.            }
  165.        }
  166.    }
  167.  
  168.    public void RecibirArchivo(String nombreArchivo, int tam)
  169.    {
  170.        PrintWriter pw2 = null;
  171.        BufferedReader br2 = null;
  172.  
  173.        try
  174.        {
  175.            String buffer;
  176.            int i = 1;
  177.            File filenombreArchivo = new File(nombreArchivo);
  178.            FileWriter fw = new FileWriter(filenombreArchivo);
  179.            pw2 = new PrintWriter(fw);
  180.            br2 = new BufferedReader(new InputStreamReader(
  181.                                        this.socket.getInputStream()));
  182.  
  183.            //synchronized (br2)
  184.            {
  185.            /*    try {
  186.                     br2.wait();
  187.                 } catch (InterruptedException ex) {
  188.                     Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex);
  189.                 }*/
  190.                //br2.notify();
  191.                //socket.setSoTimeout(4* 1000);
  192.  
  193.                while ((buffer = br2.readLine())!=null)
  194.                {
  195.                    pw2.println(buffer);
  196.                    System.out.println(i+") "+buffer.length());
  197.                    try {
  198.                        Thread.sleep(100);//le puse este sleep solo para depurar
  199.                    } catch (InterruptedException ex) {
  200.                        System.out.println("Excepcion del sleep()");
  201.                        //Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex);
  202.                    }
  203.                    i++;
  204.                }
  205.            }
  206.  
  207.            fw.close();
  208.        }
  209.        catch (IOException e)
  210.        {
  211.            System.out.println("timout liberado");
  212.            //e.printStackTrace();
  213.        }
  214.        finally
  215.        {
  216.            pw2.close();
  217.            //br2.close();
  218.        }
  219.    }
  220. }
  221.  


« Última modificación: 15 Junio 2014, 10:01 am por bdoX » En línea

bdoX

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Problemas (bloqueado) con socket en java
« Respuesta #1 en: 22 Junio 2014, 03:15 am »

El problema era que definía varios stream y lo asociaba a un mismo socket, ejemplo: declaraba un BufferOutputStream y un PrintWriter como flujos de salida y lo asociaba a un socket, ocasionando problemas en la conexión (pérdida de datos). El error no estaba en esa clase, sino en donde se instanciaba.


« Última modificación: 22 Junio 2014, 03:16 am por bdoX » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Socket Java
Java
juancho77 7 11,129 Último mensaje 5 Marzo 2009, 19:45 pm
por genco
Como usar Socket en java..!!
Java
HackerJack 6 8,981 Último mensaje 1 Agosto 2012, 13:12 pm
por reylagarto19
Socket y Java
Java
abi-ds 2 2,673 Último mensaje 8 Febrero 2012, 16:52 pm
por abi-ds
Socket java Servidor Cliente
Java
momo1234 2 4,187 Último mensaje 12 Mayo 2012, 16:57 pm
por momo1234
Ayuda con Socket en Java « 1 2 »
Java
Droni 14 5,814 Último mensaje 28 Febrero 2015, 21:41 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines