Java - mandar String por socket

 
Vista:

mandar String por socket

Publicado por Salvador (62 intervenciones) el 30/12/2005 12:27:06
Hola tengo un programa cliente-servidor que manda por un socket un String con una serie de datos, en concreto utilizo el siguiente codigo:

public void vuelcaBuffer(OutputStream out, InputStream in) {

try {
int cont = 0, yalei = 0;

while (true) {

cont = in.available();

if (cont > 0) {

out.write(in.read());
yalei = 1;

} else {

try {
if (yalei == 1) {
break;
}
Thread.sleep(300);
} catch (Exception e) {
System.out.println(e.fillInStackTrace());
}
}

}

} catch (Exception e) {
System.out.println(e.fillInStackTrace());
System.out.println("Error de lectura");
}

}

Este es el metodo que recibo un output procedente del socket conectado al cliente y un Input del String convertido del siguiente modo:

InputStream noAct = new java.io.ByteArrayInputStream(verSrv.getBytes("UTF-8"));

Donde verSrv es el String.

Bueno el problema viene cuando el cliente recibe ese String, detectado que en un momento dado en medio de la transmision in.available() devuelve un 0 y el String no llega completo, como si en medio ubiera un corte de comunicacion. Hay alguna forma de hacer este metodo mas efectivo, es decir, saber EXACTAMENTE cuando empieza y acaba la transmision ??

Gracias un saludo y felices fiestas.
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
sin imagen de perfil

RE:mandar String por socket

Publicado por chuidiang (950 intervenciones) el 31/12/2005 15:13:21
Hola:

Si solo quieres enviar cadenas y no te quieres liar demasiado, crea un DataOutputStream() pasando el OutputStream en el constructor y un DataInputStream pasando el InputStream en el constructor.

Estas dos clases tienen métodos writeUTF() y readUTF() que envian y reciben una cadena de caracteres y se encargan ellos solitos de marcar su fin de cadena, así que tú no te preocupas de nada.

Si quieres "preocuparte" un poco del tema, debes tú enviar un fin de cadena o algo parecido. La forma normal de hacerlo puede ser la de C, enviando un caracter \0 al final, o bien algo similar a lo que hace UTF, que envia al principio un entero diciendo cuántos caracteres van detrás.

De lo del \0 en java tienes un ejemplo en http://www.geocities.com/chuidiang2/sockets/cpp_java/cpp_java.html

Se bueno.
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