AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdUDPServer: Problem unter Delphi 2005???
Thema durchsuchen
Ansicht
Themen-Optionen

IdUDPServer: Problem unter Delphi 2005???

Ein Thema von romber · begonnen am 28. Mai 2005 · letzter Beitrag vom 1. Jun 2005
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

IdUDPServer: Problem unter Delphi 2005???

  Alt 28. Mai 2005, 19:42
Hallo!

Ich habe vorher Delphi 7 benutzt. So habe ich normalerweise UDP-Packete (IdUDPServer, Indy 9) empfangen:

Delphi-Quellcode:
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;
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

type TBytes = array of Byte hat auch nichts gebracht. Den Datentyp wird zwar erkannt, aber es scheitert wieder an

ADate.Position := 0 [Fehler] Unit1.pas(881): E2018 Record, Objekt oder Klassentyp erforderlich.

Was soll das alles? Was mache ich jetzt?
  Mit Zitat antworten Zitat
Thorben77

Registriert seit: 22. Okt 2004
359 Beiträge
 
#2

Re: IdUDPServer: Problem unter Delphi 2005???

  Alt 29. Mai 2005, 01:03
Also bei meinen neuner Indies ist der Parameter AData im OnUDPRead-Event vom Typ TStream. (Oder haste dich nur vertippt? )

Die Procedure müsste dann so aussehen:

Delphi-Quellcode:
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;
Weiß aber nicht, ob sich das bei den Indys 10 geändert hat .


Mfg

Thorben
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: IdUDPServer: Problem unter Delphi 2005???

  Alt 29. Mai 2005, 13:58
Bei mir steht definitiv TBytes drin, wenn ich die IdUDPServerRead-Procedure erstelle. Noch Ideen, woran es liegen könnte?
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#4

Re: IdUDPServer: Problem unter Delphi 2005???

  Alt 30. Mai 2005, 09:31
Habe nur ich so was oder wie? Hatte niemand das Problem auch? Kann mir niemand halfen?
  Mit Zitat antworten Zitat
Brisi

Registriert seit: 31. Mai 2005
Ort: Klagenfurt
1 Beiträge
 
#5

Re: IdUDPServer: Problem unter Delphi 2005???

  Alt 31. Mai 2005, 22:13
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:
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.
[edit=alcaeus]Delphi-Tags eingefuegt. Beim naechsten Mal bitte selbst machen, danke :) Mfg, alcaeus[/edit]
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#6

Re: IdUDPServer: Problem unter Delphi 2005???

  Alt 1. Jun 2005, 22:26
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

BytesToString(AData) die TBytes einfach in String konvertieren. Die Funktion BytesToString ist im Unit "IdGlobal" definiert.

Somit ist das Problem gelöst.
  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 03:30 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