Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   enviar mensaje entre aplicaciones delphi distinto PC (https://www.clubdelphi.com/foros/showthread.php?t=85388)

rabata2001 11-03-2014 19:31:52

enviar mensaje entre aplicaciones delphi distinto PC
 
Buenas a todos,

Mi deseo es enviar un mensaje desde una aplicación a otra (unidireccional, no bidireccional) en Delphi.

Estoy probando en envío con TIndyTCPCliente y TTCPIndyServer (Los UDP's a veces se salta algún mensaje, los TCP's son más fiables)


¿Existen otros componentes con los que enviar un mensaje unidireccional (tan sólo ne un sentido) de una aplicación a otra en distinto PC pero de la misma red local.?

Gracias y Saludos,

Javier

ecfisa 11-03-2014 22:12:23

Hola rabata2001.

Tenes otra opción en este enlace: Exchanging Data over the Network using Delphi

Saludos :)

nlsgarcia 11-03-2014 22:16:16

rabata2001,

Cita:

Empezado por rabata2001
...¿Existen otros componentes con los que enviar un mensaje unidireccional (tan sólo en un sentido) de una aplicación a otra en distinto PC pero de la misma red local?...

Revisa esta información:
Nota: La librería Synapse no utiliza componentes ni requiere instalación, solo se debe hacer referencia a las unidades de la librería en el Library Path de Delphi pero con la acotación de que no funciona en Win64.

Espero sea útil :)

Nelson.

rabata2001 20-03-2014 00:38:34

Buenas,

Me interesaría algo que funcione correctamente para win32 y win64.

Simplemente voy a enviar un mensaje desde un sitio a otro y continuadamente (por lo tanto no deseo cerrar la conexión), desearía un porcentaje alto de que ha llegado el dato (udp no tiene porque llegar) y los tcp se quedan congelado el servidor si tiene algún cliente conectado

¿Cómo podría cerrar las conexiones desde mi indytcpserver sin que se congele aunque tenga un cliente conectado (el servidor cierra a sus clientes y su conexion)?.

1 se conecta el servidor / cliente
2. el cliente envía datos al servidor
3. el cliente o el servidor se cierran y no se congelan

Gracias y Saludos.

escafandra 20-03-2014 00:48:35

UDP es rápido y no requiere conexión previa. Asegurar la llagada del paquete es responsabilidad del programador, basta con enviar una confirmación de recibido. TCP es más seguro porque lo automatiza el protocolo. La congelación de ambos protocolos lo resuelves con threads. Si quieres un buen control, vete a bajo nivel con sockets.

Saludos.

rabata2001 20-03-2014 10:39:16

Si tiro por el camino de UDP, prácticamente es controlar la gestión del flujo:

1. enviar desde cliente a servidor
2. recibe el servidor y enviar ack al cliente
3. si el cliente no recibe ningún ack, vuelve a enviar (numero de reintentos)

Me sigue gustando más la idea de TCP. ¿Podrías citarme algún ejemplo para usarlo y evitar la congelación cuando intente desconectar el servidor con algún cliente enganchado?.

Gracias y saludos.

ElDioni 20-03-2014 11:00:25

Yo hice una aplicación que lo que hace es, mediante un timer, revisar en una base de datos si el usuario de ese equipo tiene pendiente de leer algún mensaje dirigido a él. Al principio lo hice por IP pero para que te mostrara tus mensajes en cualquier equipo lo cambie por el nombre de usuario que iniciaba sesión en windows. El programa también admite programar cuando quieres que una persona vea el mensaje con fecha y hora.

Te lo digo por darte otra idea.

Saludos.

rabata2001 20-03-2014 11:49:45

Muchas gracias por tu aportación. ya la había sopesado, de hecho alguna cosas en mi sistema las paso así, pero me gustaría tener un poco de mejor rendimiento que sea algo directo, la bbdd es muy usada y me gustaría evitarlo.

Saludos.

escafandra 20-03-2014 14:22:55

Cita:

Empezado por rabata2001 (Mensaje 474067)
Me sigue gustando más la idea de TCP. ¿Podrías citarme algún ejemplo para usarlo y evitar la congelación cuando intente desconectar el servidor con algún cliente enganchado?.

Controlando el error de recv, podemos saber si el servidor se descotectó...

Te pongo un fragmento en C a bajo nivel con sockets
Código:

  //creamos el Sock y conectamos al servidor
  Sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if(Sock !=-1){
    //Definimos la dirección IP y Puerto del servidor
    host = gethostbyname("PCSERVER");
    direc.sin_family=AF_INET;
    direc.sin_port = htons(Port);
    direc.sin_addr = *((struct in_addr *)host->h_addr);
    ZeroMemory(direc.sin_zero, 8);
    connect(Sock, (sockaddr*)&direc, sizeof(sockaddr));

    // Saludo al servidor
    send(Sock, Saludo, lstrlen(Saludo), 0);

    // Mientras el Sock siga conectado
    do {
      Len = recv(Sock, Buffer, sizeof(Buffer), 0);
      if(Len>0){
          // Accciones pertinentes....
      }
    } while(Len!=0 && Len!=-1 && !Salir);
    closesocket(Sock);
  }

Si el código lo encierras en un thread, el resto de la app no sufrirá esperas en connect, send y recv.

Saludos.

nlsgarcia 20-03-2014 18:10:56

rabata2001,

Cita:

Empezado por rabata2001
...Estoy probando en envío con TIndyTCPCliente y TTCPIndyServer...

Revisa esta información:
Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 11:28:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi