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


0