Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TidUDPClient will nicht... (https://www.delphipraxis.net/140081-tidudpclient-will-nicht.html)

wayne312 11. Sep 2009 12:01


TidUDPClient will nicht...
 
Hallo leute,

ich habe im Moment ein Problem mit dem UDPClient von den Indy Kompos....
hier ist mein Code :

Delphi-Quellcode:
unit RecInfoServer;

interface
  uses Forms, StrUtils, SysUtils, Classes, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient;


type
  ReadInfoServer = class
  private
    idUDPClient1: TidUDPClient;
  public
    Constructor Create(ServerIP: string; ServerPort: Word);
    Destructor Destroy;
    Function GetServerName : String;
    Function GetServerMap : String;
  end;

implementation

//Constructor und Destructor ---------------------------------------------------
Constructor ReadInfoServer.Create (ServerIP: string; ServerPort: Word);
begin
 idUDPClient1 := TidUDPClient.Create();            // Genau hier kommt die Meldung
  with idUDPClient1 do begin
    Host := ServerIP;
    Port := ServerPort;
  end;
end;

Destructor ReadInfoServer.Destroy;
begin
  idUDPClient1.Disconnect;
  idUDPClient1.Free;
end;

//GetServerName ----------------------------------------------------------------
Function ReadInfoServer.GetServerName : String;
var
Name : String;
begin
  try
    idUDPClient1.Connect;
      if idUDPClient1.Connected then begin
        idUDPClient1.Send('˙˙˙˙TSource Engine Query');
        Name := idUDPClient1.ReceiveString;
      end;
  finally
    result := Name;
    idUDPClient1.Disconnect;
  end;
end;

//GetServerMap -----------------------------------------------------------------
Function ReadInfoServer.GetServerMap : String;
var
Map    : String;
Stream1 : TMemoryStream;
PacketSz: integer;
RecPack : TBytes;
begin
  try
    idUDPClient1.Connect;
    Stream1 := TMemoryStream.Create;
     if idUDPClient1.Connected then begin
       idUDPClient1.Send('˙˙˙˙TSource Engine Query');
       PacketSz:=idUDPClient1.ReceiveBuffer(RecPack);
     end;
  finally
   Stream1.WriteBuffer(RecPack,PacketSz);
  end;
end;

end.
Sobalt er die fehlerhafte Zeile erreicht hat bekomme ich Folgende Meldung :
Code:
Zugriffsverletzung bei Adresse 00539A56 in Modul 'Projekt1.exe'. Schreiben von Adresse 00000004
Ich erkenne dort kein Fehler...

mfg

Chris.R 11. Sep 2009 12:11

Re: TidUDPClient will nicht...
 
Hallo,

was für eine Indy Version benutzt du? Bei meiner Version muss ich bei ReceiveBuffer noch einen Parameter BufferSize angeben.
Was für ein Datentyp ist TBytes. Ist das vielleicht ein dynamischer Array of Byte (TByte = array of byte), dann musst du natürlich die Größe des Array initialisieren mit SetLength.

Ciao Chris

wayne312 11. Sep 2009 12:21

Re: TidUDPClient will nicht...
 
danke ersma für die antwort
Ich benutze Delphi 2009 und muss keine BufferSize festlegen...
Und der fehler tritt ja auch beim TidUDPClient.Create auf und nicht bei GetServerMap...

Klaus01 11. Sep 2009 12:26

Re: TidUDPClient will nicht...
 
Hallo,

kannst Du mal das ändern:
Delphi-Quellcode:
idUDPClient1 := TidUDPClient.Create(nil);
Grüße
Klaus

wayne312 11. Sep 2009 12:32

Re: TidUDPClient will nicht...
 
Danke Klaus, nur leider besteht der Fehler weiterhin....

PS : Ich hab die Indy 10 Komponenten

Klaus01 11. Sep 2009 12:38

Re: TidUDPClient will nicht...
 
.. nun ich habe hier kein Delphi 2009 mit entsprechenden Indys zur Verfügung.

Bei Turbo Delphi 2006 schauen die uses für Indy 10 so aus:
Delphi-Quellcode:
idGlobal,idComponent,idUDPBase,idUDPClient;
Ich verwende eine Ableitung von TidUDPClient.

Delphi-Quellcode:
TSysLog = class(TidUDPClient)
  private
    function formatSysLogMessage(event:TDxtEventRecord):AnsiString;

  public
    constructor Create(sysLogServerHost: AnsiString; sysLogServerPort: Integer); virtual;
    procedure send(event: TDxtEventRecord);
    function isServerAvailable:Boolean;
    procedure writeToBuffer(event:TDxtEventRecord;buffer:TStringList);
    procedure sendBuffer(buffer:TStringList);
end;
Der Constructor dazu sieht so aus:
Delphi-Quellcode:
constructor TSysLog.create(sysLogServerHost: String; sysLogServerPort: Integer);
begin
  inherited create(nil);
  host := sysLogServerHost;
  port := sysLogServerPort;
end;
Also alles in Allem ein nicht so großer Unterschied, bis auf die uses.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 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