TcpClient e TcpServer

Delphi

08/06/2006

Estou tentando fazer um chat com o componente TcpClient e TcpServer da paleta Internet, contudo estou encontrando dificuldade pois só estou conseguindo vizualizar no memo as respostas dos outros quando gostaria de vizualizar as minhas perguntas também.

Exemplo:

<Lnunes> Diz - ...........................
<Usuário>Diz - ...........................
<Lnunes> Diz - ...........................

Como Está:
<Usuário>Diz - ...........................
<Usuário>Diz - ...........................
<Usuário>Diz - ...........................

Desde já agradeço a atenção


Lnunes

Lnunes

Curtidas 0

Respostas

Massuda

Massuda

08/06/2006

Não sei se entendi direito, mas você não recebe o que você transmite. Você precisa lembrar na rotina de envio de texto de atualizar o memo também.


GOSTEI 0
Lnunes

Lnunes

08/06/2006

É exatamente isto eu não consigo vizualizar o que transmitir, o problema é que eu fiz este chat tendo como base o exemplo da pasta demo do delphi, e não sei quase nada de programação utilizando soquetes caso possa me auxiliar como está questão ficaria grato.

Código que estou utilizando:

---> Evento onAccept do componente TcpServer


procedure TF_Chat.ServidorAccept(Sender: TObject;
ClientSocket: TCustomIpClient);
Var
Texto:string;
DataThread: TClientDataThread;
begin
DataThread:= TClientDataThread.Create(True);
DataThread.ListBuffer.Add(ClientSocket.LookupHostName(ClientSocket.RemoteHost));
DataThread.TargetList := MM_Receber.lines;
Texto := ClientSocket.Receiveln;
while Texto <> ´´ do
begin
DataThread.ListBuffer.Add(Texto);
Texto := ClientSocket.Receiveln;
end;
DataThread.Resume;
end;


---> Evento onClick do botão enviar

Var
I:Integer;
vHost,vRemota:String;
begin
vIniFile:=TIniFile.Create(´C:\WINDOWS\MENSAGEIRO.INI´);
vHost:=vIniFile.ReadString(´CONEXAO´,´HOST´,´´);
vRemota:=vIniFile.ReadString(´CONEXAO´,´PORTA_REMOTA´,´´);

Cliente.RemoteHost := vHost;
Cliente.RemotePort := vRemota;
Try
If Cliente.Connect Then
For I := 0 to MM_Enviar.Lines.Count - 1 do
Begin
Cliente.Sendln(MM_Enviar.Lines[I]);
End;
MM_Enviar.Text:=´´ ;
MM_Enviar.SetFocus;
Finally
Cliente.Disconnect;
End;
vIniFile.Free;

Obs: Cliente é o componente TcpCliente


Desde já agradeço a atenção de todos.


GOSTEI 0
Massuda

Massuda

08/06/2006

//---> Evento onClick do botão enviar 
...
  For I := 0 to MM_Enviar.Lines.Count - 1 do 
  Begin 
    Cliente.Sendln(MM_Enviar.Lines[I]); 
    MM_Receber.Add(´Eu: ´  + MM_Enviar.Lines[I]); 
  End; 
...



GOSTEI 0
Lnunes

Lnunes

08/06/2006

Massuda muito obrigado pela ajuda.

aproveitando o tópico estes componentes permitem a criação de um nome de usuário para substituir o nome do computador?

Exemplo:

<Servidor Diz>__________ -----> <Maria Diz> _______________
<Notebook Diz>__________ -----> <João Diz> ________________


Desde já agradeço a atenção de todos.


GOSTEI 0
Massuda

Massuda

08/06/2006

Não uso esses componentes, não tenho idéia de como fazer isso, mas geralmente se inclui um comando de login de modo que você pode montar uma lista relacionando IP/porta-usuário e assim fazer o que você quer.


GOSTEI 0
Lnunes

Lnunes

08/06/2006

Massuda já conseguir solucionar a questão, mais uma vez obrigado pela ajuda.


GOSTEI 0
POSTAR