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???
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
Curtir tópico
+ 0
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
Clique aqui para fazer login e interagir na Comunidade :)