Java - Chat Serial--->código inconcluso

 
Vista:

Chat Serial--->código inconcluso

Publicado por Perla (2 intervenciones) el 10/04/2007 20:11:58
Hola!

Me dejaron hacer un chat que se comunique a través del puerto serie, para esto el profesor nos digo que bajaramos un programa que esta en la pagina rxtx.org, que allí venía un ejemplo de como comunicar dos computadoras a través de dicho puerto, que nosotros nos encargaramos de la interfaz gráfica, cosa que ya tengo, pero he estado analizando el código y hay partes que la verdad no se para que son, lo podría implementar así nomás a prueba y error con la interfaz gráfica y el profesor ni siquiera preguntaría como le hicimos, pero no quiero hacer esto, ya que me gusta comprender lo que estoy haciendo pero ya tengo varias semanas rompiendome la cabeza y nomás no logró entenderlo. A continuación les pegó el código para ver si alguien me puede dar una breve expliación de lo que hace cada método.

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
 
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
class PuertoSerial
{
    public PuertoSerial()
    {
        super();
    }
 
    void connect ( String portName ) throws Exception
    {
        CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
        if ( portIdentifier.isCurrentlyOwned() )
        {
            System.out.println("Error: Puerto en uso");
        }
        else
        {
            CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
 
            if ( commPort instanceof SerialPort )
            {
                SerialPort serialPort = (SerialPort) commPort;
                serialPort.setSerialPortParams(57600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
 
                InputStream in = serialPort.getInputStream();
                OutputStream out = serialPort.getOutputStream();
 
                (new Thread(new SerialReader(in))).start();
                (new Thread(new SerialWriter(out))).start();
 
            }
            else
            {
                System.out.println("Error: Solo soporta puerto serie");
            }
        }
    }
 
 
    public static class SerialReader implements Runnable
    {
        InputStream in;
 
        public SerialReader ( InputStream in )
        {
            this.in = in;
        }
 
        public void run ()
        {
            byte[] buffer = new byte[1024];
            int len = -1;
            try
            {
                while ( ( len = this.in.read(buffer)) > -1 )
                {
                    System.out.print(new String(buffer,0,len));
                }
            }
            catch ( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
 
 
    public static class SerialWriter implements Runnable
    {
        OutputStream out;
 
        public SerialWriter ( OutputStream out )
        {
            this.out = out;
        }
 
        public void run ()
        {
            try
            {
                int c = 0;
                while ( ( c = System.in.read()) > -1 )
                {
                    this.out.write(c);
                }
            }
            catch ( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
 
    public static void main ( String[] args )
    {
        try
        {
            (new PuertoSerial()).connect("COM1");
        }
        catch ( Exception e )
        {
 
            e.printStackTrace();
        }
    }
}
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

RE:Chat Serial--->código inconcluso

Publicado por Tom (42 intervenciones) el 10/04/2007 20:37:53
No entiendo tu problema.

connect(), obviamente, abre el puerto cuyo nombre le pasas y, una vez comprobado, crea dos threads, uno para leer y otro para escribir.

El thread de escritura lee de la entrada standard (o sea, del teclado) y escribe lo mismo al puerto serie.

El thread de lectura lee del puerto serie (debería leer lo que has escrito antes) y lo escribe por la salida standard (donde estás leyendo esto).

Si los métodos que no entiendes son los de rxtx, con el mismo paquete que te bajaste viene la documentación, si no, en su página web.
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

RE:Chat Serial--->código inconcluso

Publicado por perla (2 intervenciones) el 12/04/2007 03:49:44
Hola... Gracias ... ahora tengo otra duda, como puedo implementar ese código en ambiente gráfico, para eso hice una ventana de recibir texto y otra para enviar, así como un botón de Enviar, y las opciones de conectar y desconectar, que método tendría que invocar para que se conecte y desconecte y en caso de presionar el botón enviar que método necesito invocar.?
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