Fórum Erro ao tentar capturar dados recebidos por um TIdUDPServer #257595

08/11/2004

0

Depois de configurar porta e host e ativar o cliente em um programa e o servido em outro. Eu envio um string comum como metodo send do TIdUDPClient quando essa string chega no servidor o evento OnUDPRead do TIdUDPServer é acionado como previsto, até ai tudo bem. Os parametros do metodo que trata esse evento são o Sender que é o socket, o AData que são os dados recebidos e o terceiro que não me lembro.

O parametro AData é um TStream logo eu declaro uma variavel do tipo string e passo para o metodo read ou readbuffer do AData e coloco uma quantidade qualquer de caracteres a ser lidos. ex: AData.read(buffer, 30) até ai tudo bem. Mas quando eu tento usar o conteudo do buffer da violação de endereço. Por que ocorre isso? Será que não é desse jeito que se usa esses componentes (TIdUDPClient e TIdUDPServer)? O que pode estar acontecendo, alguma ideia???


Maxwell_monteiro

Maxwell_monteiro

Responder

Posts

08/11/2004

Delphi32

Veja esse código retirado do demo que vem com a Indy:

procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
  DataStringStream: TStringStream;
  s: String;
begin
  DataStringStream := TStringStream.Create(´´);
  try
    DataStringStream.CopyFrom(AData, AData.Size);
    UDPMemo.Lines.Add(´Received "´ + DataStringStream.DataString + ´" from ´ + ABinding.PeerIP + ´ on port ´ + IntToStr(ABinding.PeerPort));
    s := ´Replied from ´ + UDPServer.LocalName + ´ to "´ + DataStringStream.DataString + ´"´;
    ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s));
  finally
    DataStringStream.Free;
  end;
end;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar