AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TidUDPClient will nicht...
Thema durchsuchen
Ansicht
Themen-Optionen

TidUDPClient will nicht...

Ein Thema von wayne312 · begonnen am 11. Sep 2009 · letzter Beitrag vom 11. Sep 2009
Antwort Antwort
wayne312

Registriert seit: 11. Jul 2009
27 Beiträge
 
#1

TidUDPClient will nicht...

  Alt 11. Sep 2009, 12:01
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
  Mit Zitat antworten Zitat
Chris.R

Registriert seit: 8. Sep 2009
Ort: Nürnberg
68 Beiträge
 
Delphi 2010 Professional
 
#2

Re: TidUDPClient will nicht...

  Alt 11. Sep 2009, 12:11
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
  Mit Zitat antworten Zitat
wayne312

Registriert seit: 11. Jul 2009
27 Beiträge
 
#3

Re: TidUDPClient will nicht...

  Alt 11. Sep 2009, 12:21
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...
  Mit Zitat antworten Zitat
Klaus01

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

Re: TidUDPClient will nicht...

  Alt 11. Sep 2009, 12:26
Hallo,

kannst Du mal das ändern:
idUDPClient1 := TidUDPClient.Create(nil); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
wayne312

Registriert seit: 11. Jul 2009
27 Beiträge
 
#5

Re: TidUDPClient will nicht...

  Alt 11. Sep 2009, 12:32
Danke Klaus, nur leider besteht der Fehler weiterhin....

PS : Ich hab die Indy 10 Komponenten
  Mit Zitat antworten Zitat
Klaus01

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

Re: TidUDPClient will nicht...

  Alt 11. Sep 2009, 12:38
.. 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:
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
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 20:28 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