![]() |
IdUDPServer: Problem unter Delphi 2005???
Hallo!
Ich habe vorher Delphi 7 benutzt. So habe ich normalerweise UDP-Packete (IdUDPServer, Indy 9) empfangen:
Delphi-Quellcode:
Wenn ich diese Kode in Delphi 2005 (Indy 10) ausführen möchte, kommt die Meldung: [Fehler] Unit1.pas(59): E2003 Undefinierter Bezeichner: 'TBytes'. Die Deklaration
procedure TfrmMain.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes;
ABinding: TIdSocketHandle); var sText: string; begin AData.Position := 0; SetLength(sText, AData.Size); AData.ReadBuffer(sText[1], AData.Size); Memo1.Lines.Add(sText) end;
Delphi-Quellcode:
hat auch nichts gebracht. Den Datentyp wird zwar erkannt, aber es scheitert wieder an
type TBytes = array of Byte
Delphi-Quellcode:
[Fehler] Unit1.pas(881): E2018 Record, Objekt oder Klassentyp erforderlich.
ADate.Position := 0
Was soll das alles? Was mache ich jetzt? |
Re: IdUDPServer: Problem unter Delphi 2005???
Also bei meinen neuner Indies ist der Parameter AData im OnUDPRead-Event vom Typ TStream. (Oder haste dich nur vertippt? :stupid: :wink: )
Die Procedure müsste dann so aussehen:
Delphi-Quellcode:
Weiß aber nicht, ob sich das bei den Indys 10 geändert hat :gruebel: .
procedure IdUDPServerUDPRead(Sender: TObject; AData: TStream; // <-- siehe da
ABinding: TIdSocketHandle); var Text: string; StrStream: TStringStream; begin StrStream := TStringStream.Create(''); try StrStream.CopyFrom(AData, AData.Size); Text := StrStream.DataString; finally StrStream.Free; end; end; Mfg Thorben |
Re: IdUDPServer: Problem unter Delphi 2005???
Bei mir steht definitiv TBytes drin, wenn ich die IdUDPServerRead-Procedure erstelle. Noch Ideen, woran es liegen könnte?
|
Re: IdUDPServer: Problem unter Delphi 2005???
Habe nur ich so was oder wie? Hatte niemand das Problem auch? Kann mir niemand halfen?
|
Re: IdUDPServer: Problem unter Delphi 2005???
nein dieses problem dürfte anscheinend seit indy 10 bestehen
in deren hilfe steht noch TStream und im Sourcecode der indy files steht das mit TidBytes (definiert auf TBytes) drinnen! ich bin ja eher der praktische programmierer ... ehemals ansi-c auf einem digital unix server ;_) daher mein 2minuten lösungsansatz und beispiel (verbesserungswürdig aber es geht):
Delphi-Quellcode:
[edit=alcaeus]Delphi-Tags eingefuegt. Beim naechsten Mal bitte selbst machen, danke :) Mfg, alcaeus[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, StdCtrls, [b]idGlobal, idSocketHandle[/b], IdUDPClient; // in the idGlobal is das TBytes definiert // in der idSocketHandle das TidSocketHandle type TForm1 = class(TForm) IdUDPServer1: TIdUDPServer; Memo1: TMemo; Edit1: TEdit; Button1: TButton; IdUDPClient1: TIdUDPClient; procedure IdUDPServer1UDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle); var sText : String; begin // dirty but working for wordfiles too ;_) sText := String(AData); Memo1.Lines.Add(sText); end; procedure TForm1.Button1Click(Sender: TObject); begin IdUDPClient1.Active := false; IdUDPClient1.Active := true; IdUDPClient1.Broadcast(Edit1.Text, 7080); end; end. |
Re: IdUDPServer: Problem unter Delphi 2005???
So, ich habe gerade eine UDP-Demo (Indy 10) von Indy-Seite heruntergeladen.
Man fügt IdGlobal, IdSocketHandle dem Uses-Abschnitt hinzu, dann in OnUDPServerRead mit
Delphi-Quellcode:
die TBytes einfach in String konvertieren. Die Funktion BytesToString ist im Unit "IdGlobal" definiert.
BytesToString(AData)
Somit ist das Problem gelöst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz