User Tag List

Página 2 de 2 PrimerPrimer 12
Resultados 16 al 19 de 19

Tema: Duda programacion Android

  1. #16

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    22,749
    Mencionado
    226 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,240
    Agradecer Thanks Received 
    1,902
    Thanked in
    Agradecido 1,185 veces en [ARG:2 UNDEFINED] posts
    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

  2. #17

    Fecha de ingreso
    Sep 2005
    Ubicación
    Madri
    Mensajes
    438
    Mencionado
    1 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    13
    Agradecer Thanks Received 
    13
    Thanked in
    Agradecido 6 veces en [ARG:2 UNDEFINED] posts

    Unhappy

    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:
    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);
    Y ni con esas.
    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

  3. #18

    Fecha de ingreso
    Mar 2007
    Ubicación
    Barna
    Mensajes
    10,342
    Mencionado
    93 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    368
    Agradecer Thanks Received 
    1,792
    Thanked in
    Agradecido 945 veces en [ARG:2 UNDEFINED] posts
    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:

    Cita Iniciado por crossmax Ver mensaje
    Código:
    	else if(memcmp(client_message,"INIT",4)==0) {
    		printf("Respondo con la info\n");
    		lng=39;
    		memcpy(client_message,"INIT:1:00001:001:01:0001:0030:00200:0\n",lng);
    	}
    ¿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"

  4. #19

    Fecha de ingreso
    Sep 2005
    Ubicación
    Madri
    Mensajes
    438
    Mencionado
    1 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    13
    Agradecer Thanks Received 
    13
    Thanked in
    Agradecido 6 veces en [ARG:2 UNDEFINED] posts
    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()

Página 2 de 2 PrimerPrimer 12

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •