Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-01-2011
Avatar de casacham
casacham casacham is offline
Miembro
 
Registrado: abr 2006
Ubicación: Cordoba->Argentina. Arboleas->Almeria->España
Posts: 184
Poder: 19
casacham Va por buen camino
Cool Curiosa manera de leer mensajes en red

Buenas a todos. Deseo comentarles que estoy trabajando en un proyecto casero que consiste en una aplicacion de Chat para una red local. Utilizo D2009. En mi proyecto he logrado hacer funcionar el chat. Tengo una aplicacion cliente y otra servidor. Utilizo los componentes TClientSocket y TServerSocket de paleta Internet. Hago correr la aplicacion Server en una pc de la red y los clientes en otras maquinas de la misma red. Hasta aqui todo funciona bien, se conectan y se comunican entre si. El problema esta al hacer la lectura del mensaje enviado en el lado del server.

Asi envio el mensaje
Código Delphi [-]
procedure TForm1.SendTXTClick(Sender: TObject);
var Txt: AnsiString;
begin
  Txt:=AnsiString(edit1.Text);
  if ClientSocket1.Active then
     ClientSocket1.Socket.SendText(txt);
end;

y de esta manera lo lee el server
Código Delphi [-]
 
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
  i:integer;
  sRec : string;
begin
  for i := 0 to Server.Socket.ActiveConnections-1 do begin
      with Server.Socket.Connections[i] do begin
             sRec := Socket.ReceiveText;
             if sRec <> '' then
              Memo1.Lines.Add(Socket.RemoteAddress + ' y '+RemoteHost+' ha enviado-> '+sRec) ;          
     end;
  end;
 end;

El problema consiste en que el mensaje aparece como un monton de simbolos raros, yo diria que se trata de letras chinas o japonesas.

Sin embargo, haciendo lo siguiente en la aplicacion cliente, es decir, en la aplicacion que envia el mensaje:
Código Delphi [-]
 
procedure TForm1.SendTXTClick(Sender: TObject);
var Txt: AnsiString;
    i: integer;
begin
  Txt:=AnsiString(edit1.Text);
  if ClientSocket1.Active then begin
     for i := 1 to length(txt) do begin
         sleep(5);
         ClientSocket1.Socket.SendText(txt[i]);
     end;
  end;
end;

El server es capaz de leer el mensaje en forma correcta. La modificacion introducida es la instruccion sleep(5); es decir, fracciono el mensaje y lo envio caracter por caracter. El server al recibirlo de esa forma va insertando en el TMemo linea por linea el mensaje a medida que recibe cada caracter. Que en esta oportunidad se trata de letras, al juntarlas horizontalmente conforman el mensaje.

Me gustaria saber porque ocurre esto?, se trata de un problema de AnsiString y String?

Tambien les comento que utilizando TIdUDPClient y TIdUDPServer no he tenido este inconveniente. Con esos componente funciona muy bien las aplicaciones en el sentido que envio una cadena de texto, por ejemplo "hola" y el servidor me lo muestra tal cual, no en letras chinas como el TServerSocket.

Si alguien tiene alguna sugerencia o idea de que puede ser, agradezco explicacion.
__________________
La vida no trata de encontrarse a uno mismo, sino de crearse a uno mismo.
Tanto si piensas que puedes como si no, estarás en lo cierto
Responder Con Cita
  #2  
Antiguo 26-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Pues realmente es un tema nuevo para mí. Nunca he trabajo con cosas como estas. Están muy lejos de mis conocimientos. Pero yo de tú me hiría a usmear profundamente en las especificaciones del procedimiento SendText y ReceiveText, incluso en su código fuente para entenderle mejor al asunto.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 01-02-2011
Avatar de casacham
casacham casacham is offline
Miembro
 
Registrado: abr 2006
Ubicación: Cordoba->Argentina. Arboleas->Almeria->España
Posts: 184
Poder: 19
casacham Va por buen camino
Siguiento la funcion por las entrañas del .PAS

Bueno Chris, siguiendo tu consejo he seguido el procedimiento hasta sus partes intimas gracias a ctrl+click en el IDE y me ha llevado a ver que lo que finalmente termina haciendo es enviar un PChar. Lo cual me complica la interpretacion ya que ni siquiera se trata de una cadena de caracteres como String o AnsiString, asi que eso explica una parte, que enviando caracter por caracter llega la frase. Pero no explica porque no se puede enviar toda la cadena junta. Estaria bueno saber si alguien ha logrado hacer una aplicacion de CHAT con esos dos objetos.
__________________
La vida no trata de encontrarse a uno mismo, sino de crearse a uno mismo.
Tanto si piensas que puedes como si no, estarás en lo cierto
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Leer correo Gmail de manera más segura. marcoszorrilla Noticias 2 28-12-2007 20:20:53
Leer mensajes, solo desde la unit del Form? paubar Varios 2 22-08-2007 23:52:39
¿cómo accedo a mi cuenta de correo eléctrónico para leer mis mensajes? nuri Internet 1 28-04-2005 17:20:01


La franja horaria es GMT +2. Ahora son las 10:57:30.


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