Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - Debci

#1681
Java / Re: Error tonto con threads y sockets
27 Diciembre 2009, 15:00 PM
Cita de: LEYER en 26 Diciembre 2009, 23:34 PM
:P si es verdad es un error tonto. te da ese error por que  no estas haciendo la comprobacion del cierre de conexion en el hilo usuario que estas creando en tu caso es ThreadServidor..

Saludos!
Mmm comprovacion? a que te refieres, algun tipo de ping?

Saludos
#1682
Java / Error tonto con threads y sockets
26 Diciembre 2009, 15:39 PM
Hola a todos jeje, soy yo otra vez, he vuelto al java xD
Mirad estoy constryendo una aplicacion con sockets, que gestiona varios cliente mediante el uso de threads, la cosa esta en que cada vez que se conecta un cliente al servidor, este le abre un thread, y lo deja en ejecucion hasta que el cliente se cierra y le envia un binario, cuando le envia el binario se cumple el bucle y el thread muere, pero ocurre una cosa extraña, mirad el codigo:

ClienteGui.java
Código (java) [Seleccionar]


package sockets;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author debci
*/
public class ClienteGui extends javax.swing.JFrame {
            public static Socket socket;
            public static InputStream is;
            public static OutputStream os;
            public static DataInputStream dis;
            public static DataOutputStream dos;
    /** Creates new form ClienteGui */
    public ClienteGui() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        textoEnv = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosed(java.awt.event.WindowEvent evt) {
                formWindowClosed(evt);
            }
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });

        jButton1.setText("Enviar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        textoEnv.setColumns(20);
        textoEnv.setRows(5);
        jScrollPane1.setViewportView(textoEnv);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(337, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addGap(21, 21, 21)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(117, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(89, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(83, 83, 83)
                .addComponent(jButton1)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            String cadena = textoEnv.getText();
            dos.writeBoolean(true);
            dos.writeUTF(cadena);
           
        } catch (IOException ex) {
            Logger.getLogger(ClienteGui.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void formWindowClosed(java.awt.event.WindowEvent evt) {
       
    }

    private void formWindowClosing(java.awt.event.WindowEvent evt) {
        try {
            dos.writeBoolean(false);
        } catch (IOException ex) {
            Logger.getLogger(ClienteGui.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    new ClienteGui().setVisible(true);
                    socket = new Socket("localhost", 5557);
                    is = socket.getInputStream();
                    os = socket.getOutputStream();
                    dis = new DataInputStream(is);
                    dos = new DataOutputStream(os);
                } catch (IOException ex) {
                    Logger.getLogger(ClienteGui.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea textoEnv;
    // End of variables declaration

}




Servidor.java

Código (java) [Seleccionar]

package sockets;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import threads.ThreadServidor;

/**
*
* @author debci
*/
public class Servidor {

    public static void main(String[] args) throws IOException {
      Servidor servidor = new Servidor();
      servidor.ServidorChat();

    }

   public void ServidorChat()
    {
        try
        {
            ServerSocket socketServidor = new ServerSocket(5557);
           
            while (true)
            {
                System.out.println("Esperando conexiones...");
                Socket cliente = socketServidor.accept();

                Runnable nuevoCliente = new ThreadServidor(cliente);
                Thread hilo = new Thread(nuevoCliente);
                hilo.start();
               
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}




ThreadServidor.java
Código (java) [Seleccionar]

package threads;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author debci
*/
public class ThreadServidor extends Thread {

//Socket al que esta conectado el cliente
    private Socket socket1;

/** Para lectura de datos en el socket */
    private DataInputStream dataInput;

    /** Para escritura de datos en el socket */
    private DataOutputStream dataOutput;

    private boolean acabado = true;


    public ThreadServidor(Socket socket) {
        try {
            socket1 = socket;
            dataInput = new DataInputStream(socket.getInputStream());
            dataOutput = new DataOutputStream(socket.getOutputStream());

        } catch (IOException ex) {

            System.err.println("Error de procesamiento de datos: \n" + ex);

        }
    }

    public void run() {
        try {
          while(acabado){
            acabado = dataInput.readBoolean();
            String mensajeRecivido = dataInput.readUTF();
            System.out.println(mensajeRecivido + "\n");
           
          }
           
        } catch (IOException ex) {
            Logger.getLogger(ThreadServidor.class.getName()).log(Level.SEVERE, null, ex);
        }


Me explico, la cosa esta en que cuando el cliente, se cierra (formClosing) se envia el booleano al thread que lo esta atendiendo.
Si el booleano se cambia, se rompe el bucle while y se muere el thread.

El problema, y no se de donde viene, es que cuando cierro un cliente y le pido desconexion y que mate al thread, el servidor libera un error:


26-dic-2009 15:30:55 threads.ThreadServidor run
GRAVE: null
java.io.EOFException
        at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323)
        at java.io.DataInputStream.readUTF(DataInputStream.java:572)
        at java.io.DataInputStream.readUTF(DataInputStream.java:547)
        at threads.ThreadServidor.run(ThreadServidor.java:50)
        at java.lang.Thread.run(Thread.java:619)

Me da ese error y luego continua atendiendo clientes, cada vez que cierro un cliente me lo da, y no se porque es, y como comprendereis no quiero darle uso a una aplicacon que tiene un defecto claro.

Saludos y gracias a todos.
#1683
Cita de: Darkmaster-dk en 19 Diciembre 2009, 16:43 PM
Yo no entiendo mucho porque nose programación, me lo reservo para mas adelante (universidad).....pero que no se crea ninguno que por hacer esto ya es un hacker, por mucho que sepas sino as estudiao ciencias o ingenieria informatica no seras nunca un hacker, luego por supuesto otra parte se aprende autodidacticamente¡¡]]Yo no entiendo mucho porque nose programación, me lo reservo para mas adelante (universidad).....pero que no se crea ninguno que por hacer esto ya es un hacker, por mucho que sepas sino as estudiao ciencias o ingenieria informatica no seras nunca un hacker, luego por supuesto otra parte se aprende autodidacticamente¡¡ :D
Tu  desde luego no XD si repites el texto dos veces... que vas a decir...

Saludos
#1684
Haber, la cosa esta en, tu has hecho java alguna vez? porque JTable no es precisamente sencillo,y si no tienes bastante claros los conceptos dudo mucho que lo consigas.
Netbeans te proporciona una lista de todos los miembros de las funciones, y la clase JTable no e suna exepción, mirala y veras que se puede hacer mucho por tu mano, de todos modos mira esto:

http://www.chuidiang.com/chuwiki/index.php?title=JTable

Suerte.

Saludos
#1685
Electrónica / Re: [Iniciación] Que pic escojer?
19 Diciembre 2009, 09:47 AM
Cita de: skapunky en 18 Diciembre 2009, 15:09 PM
Bueno el tema de pics y microcontroladores es bastante distinto a lo que comentas que has tratado, el tema motores y control es un ramal diferente al de la electrónica digital aunque como no se lo que sabes y lo que no no puedo darte opinión en tu caso.

Por ejemplo con un microcontrolador se hace muy complicado hacer el arranque de un motor, no digo que no se pueda pero es mucho mucho mas sencillo hacerlo con un PLC o con un par de relés y algún tipo de temporizador.

En todo caso imagino que quieres adentrarte más en la electrónica digital para aprender más, así que adelante con los tutoriales.
Evidentenmente, eso lo tengo claro, no pretendia trastear mas que con algunos leds y algun transistor.


Saludos
#1686
Electrónica / Re: [Iniciación] Que pic escojer?
18 Diciembre 2009, 15:02 PM
Cita de: xtermsh en 18 Diciembre 2009, 13:01 PM
Supongo que antes de adelantarse en electrónica digital, debería comenzar por lo básico... O ya lo sabes?
ya he hecho circuitos electricos,  inversores de giro, control de motores... pero ahora quiero ir un paso adelante.

Saludos
#1687
Electrónica / Re: [Iniciación] Que pic escojer?
17 Diciembre 2009, 21:38 PM
Cita de: skapunky en 17 Diciembre 2009, 19:21 PM
Hay muchos pics sencillitos para empezar, ya que tienen pocas patillas. Para meter el programa en el pic necesitas lo que se llama un programador, busca info sobre eso, lo puedes comprar o hacertelo tu. Es importantesaber que cada pic tiene un tipo de programador aunque a veces uno mismo sirve para varios pics.

Por cual empezar? Te recomiendo el pic16F84 o uno similar, aquí te dejo un manual para que puedas empezar a informarte.
Perfecto, pero yo me refiero, a que metodo uso para conectarlo a la interficie donde se programa (el pc) ya que no lleva usb ni nada por el estilo.

Saludos
#1688
Electrónica / [Iniciación] Que pic escojer?
17 Diciembre 2009, 18:42 PM
Hola a todos, estoy entrando en el mundo de la electronica, y me gustaria saber por que pic empezar, ya tengo idea de circuitos electronicos y electricos (diodos, transistores, leds...) y me gustaria adquirir algun pic sencillito, programable en c o otro que no fuese asm (me mata xD).
Y el proceso de como se carga un programa en un pic, porque los que eh estado mirando no tienen ningun sitio donde meterselo, como implanto mi codigo en un pic? Si me diesen los detalles completos, os lo agradeceria ^^ asi como algun modelo en cocnreto barato y que tenga documentacion, no pido que sea muy potente, ram sencillita y una eeprom sencillita tambien.

Saludos a todos
#1689
Java / Re: cifrar ayuda
17 Diciembre 2009, 18:16 PM
Cita de: Partenaire en 17 Diciembre 2009, 14:04 PM
Saben una cosa... existe una etiqueta llamada code que sirve para hacer mas legible nuestro codigo  :-X
Me lo has quitado de la boca... xD
Code y poned code=java para que haga 'higthligth' ( :xD ) en el lexico del programa.

Saludos
#1690
Cita de: SAHEKA_14 en 15 Diciembre 2009, 21:19 PM
Hola ! :)

Otra vez molestando, y con un nuavo problema.
Necesito enviar archivos,por medio de sockets, y bueno pues usarlos y guardarlos temporalmente en la maquina receprora, seria mucho pedir que me diesen un ejemplo?,
He estado usando la interfas Serializable pero no he podido hacerlo.
ayudenma pofas.  :-(


Mirate sobre FileOuputStream y su analogo en Input, la cosa funciona asi, tu creas un obejto file, y lo añades al stream y lo recompones en el otro socket.
Tambien el metodo casero pero que permite muchisimo contorl de los bytes, es decir, que puedes enviarlo modificandolo y eso, que consiste en lo siguiente:
Abrir el archivo y correrlo a un arreglo de bytes, cargar ese arreglo o enviar dato por dato mediante los streams convencionale so Buffered Streams, una vez en el otro socket los recompones siguiendo el orden logico por el que te ha llegado, y lo escribes en un fichero (escribes los bytes del arreglo mediante streams de fichero).

No tengo ningun ejemplo a mano, habe rsi encuentro uno y te lo pongo.

Suerte ^^