![]() |
Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!?
Hallo,
Hat schon mal jemand dieses Indy Beispiel was unter Delphi 6 noch funktionierte unter Delphi 2006 zum Laufen gebracht ?
Delphi-Quellcode:
Bei der Deklaration meckert er schon dass jetzt AData ein TBytes sein muss, was mit der Einbindung von IdGlobal dann auch klappt. Jetzt meckert er aber noch wegen AData.Size und bei s[1] und/oder Length(s) scheint sich auch was geändert zu haben.
//procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle); var DataStringStream: TStringStream; s: String; begin DataStringStream := TStringStream.Create(''); try // s := BytesToString(AData); DataStringStream.CopyFrom(AData, AData.Size); UDPMemo.Lines.Add('Received "' + DataStringStream.DataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort)); s := 'Replied from ' + UDPServer.Name + ' to "' + DataStringStream.DataString + '"'; ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, (s[1]), Length(s)); finally DataStringStream.Free; end; end; Gruß MarLe |
Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!
Delphi-Quellcode:
//procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle); var DataStringStream: TStringStream; s: String; begin DataStringStream := TStringStream.Create(''); try // s := BytesToString(AData); DataStringStream.CopyFrom(AData,length(AData)); // <- length eingesetzt UDPMemo.Lines.Add('Received "' + DataStringStream.DataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort)); s := 'Replied from ' + UDPServer.Name + ' to "' + DataStringStream.DataString + '"'; ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, (s[1]), Length(s)); finally DataStringStream.Free; end; end; ![]() Vielleicht geht es wie oben beschrieben. Grüße Klaus |
Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!
Hallo,
Leider nicht, "inkompatible Typen TStream und TBytes". und unten "inkompatible Typen TidIPversion und Integer". Trotzdem Danke für die Hilfe. Benutzt keiner mehr die 9er Indy's bzw. nur UDP ? Für die 10er Version scheint es gar kein UDP Sample mehr zu geben?!? Gruß MarLe |
Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!
Guten Morgen,
Du nutzt doch Indy 10, sonst hättest Du die Probleme nicht. Es gab da so einige Änderungen von Indy 9 auf Indy 10. ersetzte mal das:
Delphi-Quellcode:
durch das:
DataStringStream.CopyFrom(AData,length(AData));
Delphi-Quellcode:
Grüße
DataStringStream.Write(AData,length(AData));
Klaus |
Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!
Hallo,
... uuups tatsächlich, ich war mir jetzt sicher bei der Installation die 9er Version gewählt zu haben. Hab noch nicht viel gemacht mit den Indy's, soll ich nicht besser die alte Version nehmen? Dein Tipp hat gefunzt, Danke. Jetzt zwickt's noch da:
Delphi-Quellcode:
"inkompatible Typen TBytes und Char".
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, (s[1]), Length(s));
"inkompatible Typen TidIPversion und Integer". Gruß MarLe |
Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!
Zitat:
Der Prozedurkopf schaut so aus: procedure SendTo(const AIP: string; const APort: Integer; const ABuffer: TIdBytes; const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION);
Delphi-Quellcode:
wobei data vom Typ TBytes sein sollte.
length(data,length(s)-1);
move(s[1],data,length(s)-1); ABinding.SendTo(ABinding.PeerIp,ABinding.PeerPort,data); Grüße Klaus |
Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!
Hallo,
Delphi-Quellcode:
Der Compiler läuft jetzt fehlerfrei durch, aber wenn ich über den Client was schicke, kann ich noch kurzzeitg
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle);
var DataStringStream: TStringStream; s: String; data: TBytes; begin DataStringStream := TStringStream.Create(''); try DataStringStream.Write(AData, Length(AData)); UDPMemo.Lines.Add('Received "' + DataStringStream.DataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort)); s := 'Replied from ' + UDPServer.Name + ' to "' + DataStringStream.DataString + '"'; SetLength(data, Length(s)-1); move(s[1], data, Length(s)-1); ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, data); finally DataStringStream.Free; end; end; am Server "wirre Zeichen" erkennen dann stürzt der Server ohne Fehlermeldung ab. Gruß MarLe |
Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!
Hallo,
leider kann ich das nicht testen. Habe "nur" Indy 9 installiert.
Delphi-Quellcode:
Irgendetwas passt nicht bei der Übergabe des Bytearray in den StringStream.
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle);
var DataStringStream: TStringStream; s: String; data: TBytes; begin DataStringStream := TStringStream.Create(''); // <-- hier Haltepunkt setzen try DataStringStream.Write(AData, Length(AData)); DataStringStream.Position := 0; // eventuell noch die Position auf 0 setzten UDPMemo.Lines.Add('Received "' + DataStringStream.DataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort)); s := 'Replied from ' + UDPServer.Name + ' to "' + DataStringStream.DataString + '"'; SetLength(data, Length(s)-1); move(s[1], data, Length(s)-1); ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, data); finally DataStringStream.Free; end; end; Wahrscheinlich kann man das so nicht lösen.
Delphi-Quellcode:
.. so langsam gehen mir auch die Ideen aus.
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle);
var s: String; dataString: String; data: TBytes; begin dataString:=String(pchar(AData)) UDPMemo.Lines.Add('Received "' + dataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort)); s := 'Replied from ' + UDPServer.Name + ' to "' + DataString + '"'; SetLength(data, Length(s)-1); move(s[1], data, Length(s)-1); ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, data); end; Grüße Klaus |
Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!
Hallo Klaus,
Du kennst dich ja sehr gut mit den Indy's aus, sollte ich nicht lieber gleich nur die Version 9 verwenden? Wenn ja, wie krieg ich die Version 10 sauber los und die 9er rein ? Oder gleich ohne Indy's nur mit den Sockets. Ich brauch eigentlich nur einen einfachen Dienst der mir vom Server zyklisch eine Wert an alle angehängten Client's schickt. Gruß MarLe |
Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!
Zitat:
Wenn Du die Indy 10 deinstallieren willst, machst Du das so wie bei jeder anderen Komponente auch. Wenn Du dir Indy 9 geladen hast, ist dort ein Package dabei welches Du installieren kannst. Eine Installationsbeschreibung ist auch dabei. Die Indy 9 würde ich verwenden, wenn ich schon Sourcen mit Indy 9 hätte und damit weiterarbeiten wollte. Indy 10 ist für Delphi (win32) die Zukunft - also wenn Du dich jetzt damit beschäftigen willst .. Zitat:
Mit den Indys zu arbeiten vereinfacht einiges. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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-2025 by Thomas Breitkreuz