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.