Ir al contenido


Foto

Mandar texto Aplicacion tcp indy


  • Por favor identifícate para responder
4 respuestas en este tema

#1 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 26 junio 2015 - 10:25

Hola amigos, estoy trabajando con indy, tratando de desarrollar una aplicacion que mande informacion a los clientes.

 

cliente:


php
  1. procedure TFrmMain.JvTimer1Timer(Sender: TObject);
  2. var
  3. s:string;
  4. begin
  5.  
  6. if not TCPClient1.Connected then Exit;
  7.  
  8. JvTimer1.Enabled := False;
  9. TCPClient1.IOHandler.WriteLn('send'); //command
  10. s := TCPClient1.IOHandler.ReadLn;
  11. try
  12. Fill(s); /// llena un listbox con los datos recividos
  13. except
  14. end;
  15. JvTimer1.Enabled := True;
  16.  

Servidor:


php
  1. procedure TFrmMain.TCPServer1Execute(AContext: TIdContext);
  2. var
  3. Command,s : string;
  4. i:Integer;
  5. begin
  6.  
  7. Command := AContext.Connection.IOHandler.ReadLn;
  8. if Command = 'send' then
  9. begin
  10. try
  11. for I := 0 to ListBox1.Items.Count-1 do
  12. begin
  13. s := s+ListBox1.Items[i]+'~';
  14. end;
  15. AContext.Connection.IOHandler.WriteLn(s);
  16. except
  17. end;
  18. end;
  19.  

la aplicacion manda desde el la app server los datos de un lisbox a la app cliente y este los ingresa al lisbox del cliente, todo esto me funciona bien si la aplicacion server y cliente la ejecuto en la misma computadora, pero al pasar la aplicacion server al servidor, los datos que manda a los clientes llegan incompletos:

 

ejemplo:

misma computadora recibo esto:

UcN8rUs.png

 

Aplicacion en server el el servidor:

 

LYgtCuD.png

 

 

A que se debera esto?

 

 

 


  • 0

#2 poliburro

poliburro

    Advanced Member

  • Moderadores
  • PipPipPip
  • 4.945 mensajes
  • LocationMéxico

Escrito 29 junio 2015 - 09:18

A mi esto me pasaba en el viejo Delphi 5 con los TcpServerSocket y TcpClientSocket. La razón que encontré en aquel entonces amigo es que la información era enviada a trozos entonces lo resolví agregando códigos de control de inicio y fin. :)

 

Saludos.


  • 0

#3 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 4.014 mensajes
  • LocationMadrid - España

Escrito 29 junio 2015 - 09:59

Es un problema cuando se usan sokets a bajo nivel. La solución es un bucle hasta que no quede nada por leer, o como apunta poliburro, hasta encontrar un código de control. El problema está en el tamaño máximo de paquete que admite la configuración de la red.

Saludos.
  • 0

#4 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 536 mensajes
  • LocationCali, Colombia

Escrito 02 julio 2015 - 06:08

Hola, yo hago lo mismo, pero utilizo DataSnap y una funcionalidad excelente que tiene que son los CallBacks, con ellos puede ser el servidor quien envía los mensajes a los clientes, incluso se pueden tener diferentes canales y realizar un broadcast, así puedes enviar el mismo mensaje a todos los miembros de un canal en particular, o de uno en uno.

 

He enviado información de hasta 2 megas en un solo mensaje y funciona bien.

 

Te dejo la inquietud, hay varias formas de solucionar este problema.

 

Saludos.


  • 0

#5 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 17 julio 2015 - 01:15

Hola, amigos , gracias por sus sugerencias, las tomare en cuenta.

 

Saludos!


  • 0