Venía a decir lo mismo que juan, que eso es tema del buffer fijo y que hicieras un flush xD
Me alegro que te haya servido mi código. Como digo tiene 2-3 años y está echo una mierda
Venía a decir lo mismo que juan, que eso es tema del buffer fijo y que hicieras un flush xD
Me alegro que te haya servido mi código. Como digo tiene 2-3 años y está echo una mierda
Llmarme paquete, que lo soy incluso antes de este mensaje, pero por mucho flush y mucho TCP_NODELAY que le meto al servidor en linux no hay manera.
Como visteis en el codigo, el cliente android si tiene el flush (Misato lo sabrá xD). Ahora le he metido un fflush al codigo C e incluso unas prioridades y retardos que he leido por internet al buscar "flush en linux". Quitando lo que sigue igual, me ha quedado:
Y ni con esas.Código:socket_desc = socket(AF_INET , SOCK_STREAM , 0); if (socket_desc == -1) { printf("Could not create socket"); } puts("Socket created"); FILE *f = fdopen(socket_desc, "w+"); .... int flag = 1; setsockopt(client_sock, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)); send(client_sock , client_message , lng , flag); fflush(f);
Lo cierto es que he leido que el flush en linux no se debe hacer. De ahí que se tenga que hacer el apaño del puntero al descriptor del socket. Lo que me extraña es que los 2 esteis tan seguros del flush
El flush() en Linux claro que se puede hacer, cuando se necesite y en tu caso lo necesitas No vas a esperar que se llene una ventana TCP, necesitas enviar los 39 bytes de tu paquete ya pero ya. flush(), que está para precisamente eso. Otra cosa es que no se llame flush() reconozco que hace mucho que no programo rutinas de red en C así que puede que se haga como has puesto, abriendo un fichero con el socket y fflush() al fichero, o puede que se haga con el TCP_NODELAY.
Confieso que no recuerdo así que no sé bien qué te está pasando... Probemos, palos de ciego. Mira justo en este código:
¿Dónde declaras o reservas espacio para client_message? ¿Seguro que puede meterle 39 bytes sin problemas, o te estás cargando tu propio programa?
Última edición por juanvvc; 30/09/2013 a las 19:46
"Todo es absolutamente falso, salvo alguna cosa"
Buenas de nuevo!
Tengo una buena noticia!! Mas para mi que para vosotros
Por fin parece que todo funciona como deberia!!! El problema era el final de linea que mandaba desde el servidor.
Al ver que mi server en linux funcionaba con Socket Workbrench me empecé a liar con mil cosas y no acabé de probar todas las opciones de final de linea/fichero, en linux, en windows... y todas esas cacufas.
Asique ya me he metido de lleno a mostrar pantallitas y demas historias que es lo que anima!!
Mil gracias una vez mas!!! No se que haria sin vosotros!
Por cierto, especifico la solucion, por si alguien cae por aqui con lo mismo.
Le he metido al final de la cadena en el envio desde el servidor hecho en C y en linux los caracteres "\n\r". De esa forma, el BufferReader de mi cliente en android no se queda esperando indefinidamenet al leer la linea con bufferreader.readline()
Marcadores