AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!?
Thema durchsuchen
Ansicht
Themen-Optionen

Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!?

Ein Thema von MarLe · begonnen am 16. Dez 2008 · letzter Beitrag vom 17. Dez 2008
Antwort Antwort
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#1

Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!?

  Alt 16. Dez 2008, 16:09
Hallo,

Hat schon mal jemand dieses Indy Beispiel was unter Delphi 6 noch funktionierte unter Delphi 2006 zum Laufen gebracht ?

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, 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;
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.

Gruß MarLe
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!

  Alt 16. Dez 2008, 19:26
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;
TBytes = Array of Byte

Vielleicht geht es wie oben beschrieben.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!

  Alt 17. Dez 2008, 10:52
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
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!

  Alt 17. Dez 2008, 11:00
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:

DataStringStream.CopyFrom(AData,length(AData)); durch das:
DataStringStream.Write(AData,length(AData)); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!

  Alt 17. Dez 2008, 11:11
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:

ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, (s[1]), Length(s)); "inkompatible Typen TBytes und Char".
"inkompatible Typen TidIPversion und Integer".

Gruß MarLe
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!

  Alt 17. Dez 2008, 11:25
Zitat von MarLe:
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:

ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, (s[1]), Length(s)); "inkompatible Typen TBytes und Char".
"inkompatible Typen TidIPversion und Integer".



Gruß MarLe

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:
length(data,length(s)-1);
move(s[1],data,length(s)-1);
ABinding.SendTo(ABinding.PeerIp,ABinding.PeerPort,data);
wobei data vom Typ TBytes sein sollte.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!

  Alt 17. Dez 2008, 12:45
Hallo,

Delphi-Quellcode:
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;
Der Compiler läuft jetzt fehlerfrei durch, aber wenn ich über den Client was schicke, kann ich noch kurzzeitg
am Server "wirre Zeichen" erkennen dann stürzt der Server ohne Fehlermeldung ab.

Gruß MarLe
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!

  Alt 17. Dez 2008, 13:10
Hallo,

leider kann ich das nicht testen.
Habe "nur" Indy 9 installiert.

Delphi-Quellcode:
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;
Irgendetwas passt nicht bei der Übergabe des Bytearray in den StringStream.
Wahrscheinlich kann man das so nicht lösen.


Delphi-Quellcode:
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;
.. so langsam gehen mir auch die Ideen aus.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!

  Alt 17. Dez 2008, 13:28
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
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Indy 9 Sample - UDPClientServer - Delphi 6 -> 2006 ?!

  Alt 17. Dez 2008, 13:57
Zitat von MarLe:
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 ?
Na, so gut auch nicht, ich schaue vielleicht ab und an mal in die Docu...
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 von MarLe:
Oder gleich ohne Indy's nur mit den Sockets.
Die Entscheidung kann ich Dir nicht abnehmen.
Mit den Indys zu arbeiten vereinfacht einiges.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz