Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi UDP-Query an einen Gameserver mit Indy UDP-Client (https://www.delphipraxis.net/111034-udp-query-einen-gameserver-mit-indy-udp-client.html)

Berserker 28. Mär 2008 11:59


UDP-Query an einen Gameserver mit Indy UDP-Client
 
Servus.

Ich versuche gerade einen Query an unseren Gameserver zu senden.
Funktioniert auch Prima und ich bekomme auch Daten zurück.

Wenn nun aber 20 oder mehr Spieler auf dem Server sind fehlen Daten, da ich nur 2047 Bytes zurückbekomme, oder ich verfolge einen falschen Lösungsweg.

Aktueller Code zur Abfrage:

Delphi-Quellcode:
procedure TfrmMAIN.btnQueryClick(Sender: TObject);
var Buffer: Array [0..2047] of Byte ;
    i, j: integer;
    strTemp: string;
    str1: string;
    readAgain: boolean;
begin
  UDPClient1.Active := true;
  UDPClient1.BufferSize := 16384;
  UDPClient1.Send('\\basic\info');
  UDPClient1.ReceiveBuffer( Buffer, 8192);
  j := 0;
  for i := 0 to length(Buffer) do begin
    str1 := Char(Buffer[i]);
    strTemp := strTemp + str1;
  end;
  UDPClient1.Active := false;
  Memo1.Lines.Text := strTemp;
end;
Für Lösungen wäre ich dankbar.

MfG, Ronny

Berserker 28. Mär 2008 12:13

Re: UDP-Query an einen Gameserver mit Indy UDP-Client
 
Was ich schon versucht habe ist dies:

Delphi-Quellcode:
var Buffer: Array [0..4096] of Byte ;
Dies brachte jedoch nicht den gewünschten erfolg.

franktron 28. Mär 2008 12:24

Re: UDP-Query an einen Gameserver mit Indy UDP-Client
 
Also das passt ja garnicht du will 8192 Byte Empfange und hast nur ein Puffer für 4096

Delphi-Quellcode:
UDPClient1.ReceiveBuffer( Buffer, 4096); ist besser oder den Puffer Erhöhen

Berserker 29. Mär 2008 20:22

Re: UDP-Query an einen Gameserver mit Indy UDP-Client
 
Also irgendwie bringt dies auch nicht den gewünschten Erfolg.

Ich habe jetzt folgendes geändert:

Delphi-Quellcode:
var Buffer: Array [0..8192] of Byte ;

begin

  UDPClient1.Port := 1717; // GameQueryPort
  UDPClient1.Active := true;
  UDPClient1.BufferSize := 8192;
  UDPClient1.Send('\\status\\');
  UDPClient1.ReceiveBuffer( Buffer, 8192);
  j := 0;
  for i := 0 to length(Buffer) do begin
    str1 := Char(Buffer[i]);
    strTemp := strTemp + str1;
  end;
  UDPClient1.Active := false;
  Memo1.Lines.Text := strTemp;

...
end;
Ich bekomme 2048 Byte daten zurück und dann nur noch Salat.

Berserker 30. Mär 2008 19:06

Re: UDP-Query an einen Gameserver mit Indy UDP-Client
 
Also nach einigem Google'n habe ich nun herausgefunden das der UDPServer für jedes Paket (laut Doku) einmal den UDPRead Event auslöst.

Jedesmal liest das also 2048 Bytes an Daten.
Nur tut er dies bei mir nur einmal.

Wieso habe ich aber nicht herausbekommen können.
Falls von euch jemand eine Idee hat wäre ich dankbar.

MfG, Ronny

Die Muhkuh 30. Mär 2008 19:11

Re: UDP-Query an einen Gameserver mit Indy UDP-Client
 
Um was für einen Server handelt es sich denn?
Was sagt dessen Doku?

Berserker 30. Mär 2008 19:19

Re: UDP-Query an einen Gameserver mit Indy UDP-Client
 
Der Server an den ich den Befehl sende ist ein Americas Army Spieleserver.
Es kommen ja auch daten zurück aber halt nur 2048 Bytes.

Ich vermute mal das ist ein Paket.
Nur die lese ich die weiteren Pakete die noch kommen?

UDP ist für mich halt Neuland.

MFG, Ronny


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