Java - Socket cliente no recibo respuesta desde ejecutado desde consola

   
Vista:
Imágen de perfil de jorge

Socket cliente no recibo respuesta desde ejecutado desde consola

Publicado por jorge (5 intervenciones) el 03/02/2017 18:23:32
Hola Amigos necesito ayuda con java , tengo un programa cliente que desde netbeans se ejecuta , y manda la respuesta al cliente , y desde la misma computadora ejecutando en consola queda a la espera de una respuesta del servidor socket ,
entonces desde consola no funca y desde netbeans si me da.
por que hace esa diferencia el netbeans .. o la pc

El programa lo ejecute en distintas maquinas, y no funciona desde consola.

Desde el socket de servidor , recibo los datos ,seria "#h" y los envia al cliente.
ajunto archivo
sintaxis : java -jar "clientesimple.jar" 129.165.6.5



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
package clientesimple;
 
 
import java.io.BufferedReader;
 
import java.io.InputStreamReader;
 
import java.io.PrintWriter;
 
import java.net.Socket;
// declararamos la clase clientetcp
 
public class Clientesimple {
 
//    public String ipServidor = null //"192.168.2.5";//
    static final int PortServidor = 9761;
//    static final String HOST = "localhost";
//    static final int Puerto = 4444;
 
    public static void main(String argv[]) {
//        PrintStream salida;
//        StringBuffer instr = new StringBuffer();
        try {
             if (argv.length==0) {
        throw new NullPointerException("Falta parametro: IP de destino. \nEjemplo java -jar \"clientesimple.jar\" 192.168.2.3");
    } else {
            Socket skCliente = new Socket(argv[0], PortServidor);
//   debug("Connected");
 
            PrintWriter outr = new PrintWriter(skCliente.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(skCliente.getInputStream()));
 
 
 
            outr.print("#h");// send the response to client
            outr.flush();
 
            int line;
            String total="";
            while ((line = in.read()) != 65533) // just read everything
            {
            total=total+    (char)line;
            }
            in.close();
            System.out.println(total );
            outr.close();
 
 
            skCliente.close();
             }
 
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
 
    }
}
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
Imágen de perfil de jorge

Socket cliente no recibo respuesta desde ejecutado desde consola

Publicado por jorge (5 intervenciones) el 03/02/2017 21:48:16
Estimado encontre el error , el fin de linea de este controlador es 65533 asi funciona con el netbeans , pero en consola el fin es 255 de ascii. seguramente es el sistema operativo con UTF
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
Imágen de perfil de jorge

Socket cliente no recibo respuesta desde ejecutado desde consola

Publicado por jorge (5 intervenciones) el 03/02/2017 22:26:07
El problema no está en el código
Esta aquí:

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Usted está tratando con datos binarios por lo que debe utilizar la corriente cruda - no convertirlo en una Reader, que está destinado para la lectura de caracteres .

Que está recibiendo 65533 porque esa es el entero utilizado para el "carácter Unicode de reemplazo" que se utiliza cuando un valor no puede ser representado como un verdadero carácter Unicode. El comportamiento exacto de su código actual dependerá de la codificación de caracteres por defecto en su sistema - que de nuevo no es algo que debe confiar.

Además, usted está asumiendo cada byte debe traducirse a un único personaje - en esencia lo que está suponiendo la norma ISO-8859-1. No he comprobado la especificación, pero dudo de que eso es lo que debe utilizar.
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
Imágen de perfil de jorge

Socket cliente no recibo respuesta desde ejecutado desde consola

Publicado por jorge (5 intervenciones) el 03/02/2017 22:33:37
Una solución diferente a la anterior de Jon, sólo tiene que definir el juego de caracteres ISO-8859-1. Por defecto Java utiliza UTF-8.

in = new BufferedReader(newInputStreamReader(kkSocket.getInputStream(),"ISO-8859-1"));
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