• Viernes 3 de Mayo de 2024, 07:02

Autor Tema:  el segundo send no llega  (Leído 1314 veces)

blasata

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
el segundo send no llega
« en: Lunes 11 de Enero de 2010, 19:07 »
0
Hola de nuevo,
tratando de hacer la aplicación cliente me encuentro con que el primer send que envío al servidor llega correctamente, pero los que mando después no: o llega algo pero no contiene nada. Y si al servidor le pongo control de errores ni eso.
El valor que devuelve send es correcto, no hay errores yo creo.

No sé si poner código, es simplemente
send(cliente_m, sip, strlen(sip)+1, 0); //ok
send(cliente_m, sip, strlen(sip)+1, 0); // falla, aunque cambien el mensaje

El programa servidor viene con un su cliente (que tengo que emular), y he comprobado que con él todos los send llegan.
¿Antes de hacer hacer otro envío hay que hacer algo pero qué?
¿¿se me escapa algo??

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: el segundo send no llega
« Respuesta #1 en: Martes 12 de Enero de 2010, 13:54 »
0
No lo entiendo.

¿Qué significa "Y si al servidor le pongo control de errores ni eso" mezclado con "El programa servidor viene con un su cliente (que tengo que emular)"? Es decir, ¿Cómo puedes ponerle "control de errores" al servidor si lo que tienes que emular es el cliente?

¿Compruebas los valores devueltos por send? ¿Cierra el servidor el socket con cada envío? ...
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

blasata

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: el segundo send no llega
« Respuesta #2 en: Martes 12 de Enero de 2010, 18:02 »
0
Sí me he explicado un poco mal,
tengo un software de desarrollo donde hacer las pruebas: un Servidor y un Cliente. Protocolo utilizado: SIP
   - Si desarrollo un cliente, verifico que se comporta igual que el Cliente original al comunicarse con el Servidor.
   - Y si desarrollo un servidor ver que se comporta igual que el Servidor original con los clientes.
Mi caso es el primero: hacer un cliente.
El Servidor, como el Cliente, tienen un archivo de configuración en el que se puede activar la opción de control de errores(checksum y todo eso).

- Si pongo control de errores desactivado, al hacer el primer send, llega lo que mande (sea un comando SIP válido o no)

       1. Received raw, non-SIP text:    en el caso de enviar una cadena que no reconoce
        o
       2. Una ventana indicando el nombre del comando enviado:  en el caso de enviar una cadena que sí reconoce

    La segunda y siguientes veces que envío, sale la primera ventana pero vacía (mande un comando SIP válido o texto cualquiera)


  - Si pongo control de errores activado es lo mismo, sólo que si mando cadenas que no reconoce como comandos SIP, las ignora sin decir nada. Pero igual que antes sólo me muestra la primera, las demás no.

El servidor no cierra el socket, y los valores de send van bien (el nº de bytes quue envía).
Espero que ahora se entienda mejor. Si se os ocurre algo....

EI: juntando mensajes.

He hecho pruebas con un programita TCP IP Test Server: todo lo que mi cliente envía lo recibe...
El problema está en el Servidor que me han pasado para probar.
Por lo menos ya sé que el cliente envía como dios manda. Vamos a seguir probando cosas.

EI: juntando mensajes.

el fallo está en el +1 de:

send(cliente_m, sip, strlen(sip)+1, 0);

Para que el server que uso se entere debería ser:

send(cliente_m, sip, strlen(sip), 0);

saludos