Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   La novata inutil sigue (problema con el cliente) (https://www.clubdelphi.com/foros/showthread.php?t=56208)

SindyL34 11-05-2008 02:51:42

La novata inutil sigue (problema con el cliente)
 
bueno eh de aki de nuevo lamento las molestias, el problema que tengo es con el eejemplo del chat indy

luego de hacer modificaciones checarlo y estudiarlo no eh podido quitar cierto detallito o mas bien arreglar un problema con el programa cliente

se traba

al momento de dar clic en la barra donde se pondra el texto para enviar al chat (me refiero al programa cliente) se congela. y son mas que un par de lineas que no puedo entender por que se congela o mas bien una linea, la linea donde el tpcliente envia la linea de texto

Cita:


if key = #13 then
begin
IdTCPClient1.WriteLn(edMessage.Text);
edMessage.Text := '';
end;
hay otra manera de ke el cliente envie texto?

BlueSteel 11-05-2008 03:08:31

Hola SindyL34

Creo que debes poner un titulo más adecuado para tu mensaje... de lo contrario puede que no lo tomen en cuenta ...

Además, deberias utilizar las etiquetas, en donde el codigo que señalas quedaria así


Código Delphi [-]
if key = #13 then
begin
       IdTCPClient1.WriteLn(edMessage.Text)
       edMessage.Text := '';
end;

Salu2:p:D

SindyL34 11-05-2008 03:27:31

jeje gracias, puse una etiqueta de citar al codigo, este sobre el nombre del tema ya no lo puedo cambiar pero lo tomare en cuenta para la proxima vez, gracias

Ñuño Martínez 12-05-2008 09:56:01

Cita:

Empezado por SindyL34 (Mensaje 285825)
al momento de dar clic en la barra donde se pondra el texto para enviar al chat (me refiero al programa cliente) se congela. y son mas que un par de lineas que no puedo entender por que se congela o mas bien una linea, la linea donde el tpcliente envia la linea de texto

Dos preguntillas para entenderlo:

¿Esa barra, es un TEdit, verdad? ¿Y el código que pones se ejecuta al pulsar con el ratón sobre ese TEdit?

SindyL34 13-05-2008 02:39:02

el codigo que presente es el codigo que el ejemplo del chat indy muestra, no hay boton alguno en el cliente solo en que conecta, pero si se conecta el servidor puede enviar mensages al cliente y el cliente los recive

es cuando el cliente quiere enviar (es decir cuando se ejecuta el codigo que di, segun yo solo cuando se da enter envia el texto) cuando se congela, es mas no se teclea texto alguno y pasa esto

SindyL34 15-05-2008 02:36:38

sorry de nuevo oyep ya lo cheque de nuevo y ya se donde esta el error es en un timer pero no se por que, eh tratado de cambiarlo y obtengo el mismo resultado, el programa se congela cuando llega al tiempo establecido por el timer.

mi pregunta es

es posible recibir mensages sin el timer o sin que se trabe T_T
Cita:

procedure TForm1.Timer1Timer(Sender: TObject);
var
Msg : String;
begin
if not IdTcpClient1.Connected then // estas dos lineas no las puedo quitar por que no
exit; //corre el programa

Msg := IdTCPClient1.ReadLn; //se lee lo que se recibe
if msg <> '' then
begin
memLines.Lines.Add(Msg);
end;
end;

Ñuño Martínez 16-05-2008 10:41:20

Pues menos mal que encontraste dónde estába el problema, porque yo no tenía ni idea :).

Respecto al Timer, hay que tener cuidado para que no se autobloquée. Por un lado comprueba cada cuánto tiempo se produce la alarma (evento), ya que si es demasiado rápido no le dará tiempo a dar la respuesta antes de que tenga que ejecutarse otra vez. Creo que había un método o propiedad que permitía "parar el reloj" y luego ponerlo otra vez en marcha.

El problema también puede estar aquí:
Código Delphi [-]
Msg := IdTCPClient1.ReadLn; //se lee lo que se recibe
if msg <> '' then ...
¿No hay otra forma de saber si hay mensajes pendientes? ¿O un evento en TCPClient que se ejecute cuando se reciban?

SindyL34 19-05-2008 02:59:52

bueno este s el codigo del cliente en el evento onconnect

Cita:

procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
IdTCPClient1.WriteLn(edUserName.Text);
end;

el cliente no tiene tantos eventos segun lo que vi el server tiene un evento llamado on execute que tiene este codigo

Cita:

{ Get the text sent from the client }
Msg := AThread.Connection.ReadLn;

intente llamar a un evento semejante al que tiene el server pero no se como usarlos, o mas bien al intentarlo no do ningun resultado, los eventos son
on status
onwork
onworkbegin
onworkend

intente solo poniendo que recibiera pero simplemente no hace nada, si cambio el tiempo de relog a muy alto pues no recibe nada y siempre se bloquea cuando se ejecuta

SindyL34 29-05-2008 01:54:54

hola ya por mas que le busque a lo mas que pude llegar era a ke se trabara por pequeños lapsos de tiempo, esto cambiando el lapso del timer a 3000 (ni mas ni menos por que no funcionaba por que no lo se XD) y cambiando
Cita:

if IdTcpClient1.Connected then
begin
///codigo
end;
despues buscando mas encontre el componente antifreze que soluciono todo a cualquiera que le falle el chat solo agregue este componente al servidor y al cliente y no tendra problemas


gracoas


La franja horaria es GMT +2. Ahora son las 17:37:52.

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