Pointer Record

Delphi

16/04/2006

Compoentes: IdTCPServer - IdTCPClient

Estou querendo enviar do cliente para o server um Pointer

Pointer:
TTeste = ^PTeste;
PTeste = record
Nome: String;
IP: String;
...
end;


Como faço para enviar o Pointer??

Criei ele
var
Teste: TTeste;
begin
New(Teste);
Teste.Nome:= ´dsdas´;
Teste.IP:= ´0.0.0.0´;
Comando do TCPClient para enviar para o TCPServer;
end;

Alguem pode me ajudar??


Rudá

Rudá

Curtidas 0

Respostas

Thomaz_prg

Thomaz_prg

16/04/2006

Bom, não usei estes componentes, mas usando ServerSocket e ClientSocket, bastava usar SendBuf( Ponteiro ).


GOSTEI 0
Paullsoftware

Paullsoftware

16/04/2006

bem eu faço assim:
...
type

  PClient   = ^TClient;
  TClient   = record
    IP      : string[15];            { Ip da estação na rede }
    Nome    : String[40];            { Nome da Estação na rede }
    Aberto
...


e para enviar faço
procedure TfMain.EnviaMsg;
var
  Msg    : String;
  SelClient : PClient;
begin
...
     begin
      try
      SelClient := PClient(Clients.LockList.Items[lbClients.ItemIndex]);
      TIdPeerThread(SelClient.Thread).Connection.WriteLn(Msg);
      finally
      Clients.UnlockList;
      end;

será que é isso que vc quer? :wink:


GOSTEI 0
Rudá

Rudá

16/04/2006

Eu quero é enviar o ponteiro para o tcp cliente

Algo como write(ponteiro), usando o componente indy!


GOSTEI 0
Paullsoftware

Paullsoftware

16/04/2006

não testei, mais pode ser que funcione
no TCPServerConnect(AThread: TIdPeerThread);
..
var
 Posicao : Pointer;
 NewClient : PClient;
begin
  GetMem(NewClient, SizeOf(TClient));
...
 NewClient.IP      := AThread.Connection.Socket.Binding.PeerIP;
 NewClient.Nome    := UpperCase(GStack.WSGetHostByAddr(NewClient.IP));
 Posicao := AThread;//Aqui pego o Pointer do cliente
para enviar tente usar WriteBuffer assim:
 AThread.Connection.WriteBuffer(AThread,sizeOf(NewClient)); 
 AThread.Data := TObject(NewClient);
....
 try
   Clients.LockList.Add(NewClient);
  finally
    Clients.UnlockList;
 end;
...



GOSTEI 0
Rudá

Rudá

16/04/2006

Eu queria fazer algo do tipo assim

var
Teste: PClient;
begin
New(Teste);
NewClient.IP:= AThread.Connection.Socket.Binding.PeerIP;
NewClient.Nome:= UpperCase(GStack.WSGetHostByAddr(NewClient.IP));
AThread.Connection.WriteBuffer(Teste,sizeOf(NewClient));

Mas não vai!


GOSTEI 0
Rudá

Rudá

16/04/2006

Não tem como transformar um pointer em Stream??
Como isso podemos enviar um stream!


GOSTEI 0
POSTAR