Sockets Java-C

Gus
16 de Septiembre del 2004
Hola a todos,
estoy intentando comunicar un cliente java y un servidor C y me funciona...a medias. Mientras que no hay problemas cuando java manda mensajes, pues C los recibe bien, no puedo decir lo mismo al contrario. Si lo que manda el servidor C al Java es un mensaje sin mas, es decir, un char *mens = "HOLA"; no hay problema, se recibe bien, pero el problema es que quiero que mande el resultado de una funcion y no lo hace bien.
Este es un fragmento del codigo en C donde mando el mensaje

retval = send(msgsock,Getdata(Buffer,Buffer2, &db),sizeof(Buffer2),0);

donde la cabecera de Getdata es
char *Getdata(char *transaction, char *query, struct DBType *db)

y la forma en que recibo en java es

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str;
StringBuffer texto=new StringBuffer();
System.out.println("Entro en el if");
if ((str = in.readLine())!=null)
{
reference.printResult(str);
texto.append(str);
}

pero imprime el mensaje de antes del if y luego no sigue, como si no reconociera el caracter de fin de linea (de fin de mensaje). Alguien puede decirme por que? deberia añadir algo a la cadena de C para que java viera que ha acabado?
Muchas Gracias!!

chuidiang
16 de Septiembre del 2004
Hola.

Java y los PC llevan los enteros cambiados los bytes. Me explico, si el 1 en java ocupa 4 bytes que son 0 0 0 1, en intel (PC) también ocupa 4 bytes, pero son 1 0 0 0 (dados la vuelta). El resultado es que en java obtendras un entero extraño.

En C suele haber funciones estilo htons(), htonl(), etc que convierten estos bytes y deberías usarlas.

En http://www.geocities.com/chuidiang/java/sockets/cpp_java/cpp_java.html tienes un ejemplo de sockets entre java y C y está comentada toda esta problematica.

Se bueno.