-
Forum: Netzwerke
Delphi
by Flodding,
1. Nov 2015
Danke für den Hinweis mit dem Leeren des Buffers. Leider hat dies noch nicht zum Erfolg geführt.
FillChar(buffer, SizeOf(buffer), 0);
Nachdem ich das ganze ein wenig überarbeitet habe, komme ich nun wenigstens schonmal zu einem sicheren Ergebnis. Ich bekomme immer exakt 2 Mal die selbe Liste (geplant -> y - Vaiable) obwohl ich die IP Adresse im "response" ändere.
Hier erstmal der Code:
...
-
Forum: Netzwerke
Delphi
by Flodding,
31. Okt 2015
Irgendwie hab ich meinen aktuellen Code vergessen:
procedure Get_SERVER_LIST(a1: byte; a2: byte; a3: byte; a4: byte; a5: Word);
var
// request : TA2S_InfoRequest;
request : TServerListRequest;
response : TServerListResponse;
buffer : TBufferArray;
i : Integer;
y : Integer;
-
Forum: Netzwerke
Delphi
by Flodding,
31. Okt 2015
...
Ich häng immernoch an der Kompletten Serverliste...
Ich bekomme stets nur den ersten Teil, danch bekomme ich nichts brauchbares...
Noch einer Lust mir zu helfen ?
MFG
-
Forum: Netzwerke
Delphi
by Flodding,
26. Feb 2015
Mit der Swapword-Funktion klappt es. Danke Neutral General
Ich muss jetzt aber dazu sagen, dass ich die ganze Zeit den Verdacht hatte, dass die Bytes vertauscht sind. Drauf gekommen bin ich durch das "unsigned" davor; bei den Anderen stand es nicht davor. Aber ich war fest davon überzeugt, dass das nicht so sein wird, da die anderen "Word" ja auch nicht vertauscht waren.
Ich hätt ma früher...
-
Forum: Netzwerke
Delphi
by Flodding,
26. Feb 2015
nagut als Word hab ichs ja auch nicht hinbekommen.
-
Forum: Netzwerke
Delphi
by Flodding,
26. Feb 2015
Lese bitte die Tabelle am Ende dieser Seite:
http://edn.embarcadero.com/article/10156#H15
Laut dieser Tabelle ist ein "unsigned short" in C ein "Char" in Delphi.
-
Forum: Netzwerke
Delphi
by Flodding,
26. Feb 2015
Im PHP-Code wird IP : PORT wie folgt per "echo" ausgegeben:
$addy = "$a1.$a2.$a3.$a4";
$key = $addy.":".$a5;
echo $key."\n";
Einige Zeilen zuvor werden $a2 - $a5 gefüllt:
$a2 = ord(fread($socket,1));
$a3 = ord(fread($socket,1));
$a4 = ord(fread($socket,1));
$a5 = ord(fread($socket,1))*256 + ord(fread($socket,1));
-
Forum: Netzwerke
Delphi
by Flodding,
26. Feb 2015
So werte ich den Buffer aus:
if chr(response.PacketHeader) = 'f' then
begin
for y := 0 to 10 do
begin
Move(buffer, response.First, SizeOf(response.First)); inc(i, SizeOf(response.First));
Move(buffer, response.Second, SizeOf(response.Second)); inc(i, SizeOf(response.Second));
Move(buffer, response.Third, SizeOf(response.Third)); inc(i,...
-
Forum: Netzwerke
Delphi
by Flodding,
26. Feb 2015
Ich habe dafür ja auch einen PHP-Vorlage:
<pre>
<?php
/*
Example of how to get server list from steam. Works for both Arma 2 and 3 servers
Original Source: https://developer.valvesoftware.com/wiki/User:Pizzahut/test.php
*/
$master_servers = array("hl2master.steampowered.com");
define("MIN_PORT", 27010); // Range of port numbers which the master servers
-
Forum: Netzwerke
Delphi
by Flodding,
25. Feb 2015
Ich habe es abgeändert um die Querys wieder Byte für Byte eingeben zu können:
TInfoRequest = packed record
RequestHeader: array of Byte;
PacketHeader: array of Byte;
Payload: array of Byte;
end;
Die anderen beiden Querys habe ich dementsprechend umgebaut und die funktionieren weiterhin.
-
Forum: Netzwerke
Delphi
by Flodding,
25. Feb 2015
Ja entschuldigung .
Es sind meisst nur Flüchtigkeitsfehler und ich mag schon garnicht mehr weiter Fragen stellen weil ich mich langsam anfange über mich selber zu ärgern und schämen. :roll:
Dieser Query sollte doch eigentlich dann richtig sein:
request.Payload := $31; // die "1"
request.Payload := $FF; // ÿ für Weltweit
request.Payload := $30; // 0
request.Payload := $2E; // .
...
-
Forum: Netzwerke
Delphi
by Flodding,
25. Feb 2015
Ich hatte die Definitionen ja exakt ganauso schon gepostet.
Dass es mehrere Pakete werden für die komplette Serverliste hab ich auch schon verstanden.
Ich wollte erstmal nur ein Paket "sortieren" und glaube, dass ich einfach einen falschen Query ausführe.
Als Response bekomme ich IP Adressen von Servern die nicht dem Filter entsprechen.
Das kann doch nicht an der Aufteilung der...
-
Forum: Netzwerke
Delphi
by Flodding,
25. Feb 2015
Ich versuche jetzt die Master-Serverliste abzufragen.
Ich bekomme sogar Antwort. :thumb:
Ich hab jetzt etliche Tests gemacht und rumprobiert, aber ich bekomme einfach keine vernünftige Liste mit servern die ich dann per Query abfragen könnte.
TServerListResponse = record
ResponseHeader: Integer;
PacketHeader: Word;
First: Byte; // Byte
-
Forum: Netzwerke
Delphi
by Flodding,
25. Feb 2015
LongInt wäre da richtig oder?
http://www.delphibasics.co.uk/RTL.asp?Name=LongInt
-
Forum: Netzwerke
Delphi
by Flodding,
25. Feb 2015
Die Sekundenanzeige bei Der Playerinfo will auch nicht so ganz.
TPlayerResponse = record
ResponseHeader: Integer;
PacketHeader: Byte;
Challenge: Integer;
PlayerCount: Byte;
PlayerIndex: Byte;
PlayerName: String;
PlayerScore: Integer;
-
Forum: Netzwerke
Delphi
by Flodding,
25. Feb 2015
Dies hier funktioniert bei mir:
procedure Get_A2S_INFO;
var
request: TInfoRequest;
response: TInfoResponse;
buffer: TBufferArray;
i: Integer;
CheckTime: TDateTime;
begin
request.RequestHeader := -1;
-
Forum: Netzwerke
Delphi
by Flodding,
25. Feb 2015
Nachdem das OnError Event deaktiviert wurde, funktionierte dann auch "bmNonBlocking"
Der Workaround funktioniert zwar, aber die Abfragezeit ist mit 5 Sekunden etwas lang.
form4.udp1.BlockMode := bmNonBlocking;
form4.udp1.RemoteHost:= form4.edit1.Text;
form4.udp1.RemotePort:= form4.edit2.Text;
form4.udp1.Open;
if form4.udp1.Connected then
begin
-
Forum: Netzwerke
Delphi
by Flodding,
25. Feb 2015
Ich habe das OnError Event erstmal deaktiviert, weil der immer ausgelöst wurde wenn WaitForData zu lange gedauert hat.
Habs so ausprobiert jetzt:
form4.udp1.RemoteHost:= form4.edit1.Text;
form4.udp1.RemotePort:= form4.edit2.Text;
form4.udp1.Open;
if form4.udp1.Connected then
begin
form4.Udp1.SendBuf(request, SizeOf(TInfoRequest));
-
Forum: Netzwerke
Delphi
by Flodding,
25. Feb 2015
EDIT: Frage nach der Antwort gepostet. :oops:
Hallo!
Immernoch die "nicht erreichbar" Problematik.
Mein aktueller Code um die Verbindung aufzubauen:
form4.udp1.RemoteHost:= '5.45.97.44';
form4.udp1.RemotePort:= '2301';
form4.udp1.Open;
-
Forum: Netzwerke
Delphi
by Flodding,
24. Feb 2015
Hab den Fehler gefunden.
Move(buffer, response.PlayerName, SizeOf(response.PlayerName)); inc(i, SizeOf(response.PlayerName));
kann ja nicht gehen... wofür hab ich denn EXTRA ne GETSTRING Funktion geschenkt bekommen?
response.PlayerName := GetString(buffer, i);
Muss es natürlich heissen.
Die Abfrage mit den Spielernamen funktioniert nun auch:
procedure Get_PLAYER_INFO;
var
request:...
-
Forum: Netzwerke
Delphi
by Flodding,
24. Feb 2015
Vielen Dank , das hat auch super geklappt.
Hab jetzt mal rumgespielt und versucht die A2S_PLAYER Daten zu bekommen. Das Funktionierte vorher ja auch schon soweit, dass die aktuelle Spielerzahl ausgegeben wurde.
an dem selben Punkt bin ich jetzt mit der neuen Funktion die ich etwas umgebaut habe.
TPlayerResponse = record
ResponseHeader: Integer;
PacketHeader: Byte;
Challenge:...
-
Forum: Netzwerke
Delphi
by Flodding,
24. Feb 2015
So habe ich es gemacht. Das kopierte Stückchen war wohl etwas unklar.
procedure Get_A2S_INFO;
var
request: TInfoRequest;
response: TInfoResponse;
buffer: TBufferArray;
i: Integer;
begin
request.RequestHeader := -1;
request.PacketHeader := 'T';
-
Forum: Netzwerke
Delphi
by Flodding,
24. Feb 2015
Also LOB an Medium der mit so wenig Aufwand doch so viel erreicht hat in diesem Thema.
Vielen Dank dafür. 8-)
Der hängt sich immernoch auf wenn ich auf einen falschen Port verbinde.
Habe die Änderungen vorgenommen wie vorgeschlagen:
form4.udp1.RemoteHost:= form4.edit1.Text;
form4.udp1.RemotePort:= form4.edit2.Text;
form4.udp1.Open;
-
Forum: Netzwerke
Delphi
by Flodding,
24. Feb 2015
natürlich gerne :)
Es gibt einmal meinen privaten Server :
Host: 5.45.97.44
Port: 2301
Und dann gibt es die große Serverliste:
http://last-templers.de/a2epoch/serverlist.php
-
Forum: Netzwerke
Delphi
by Flodding,
24. Feb 2015
Sorry habe eben die Dateien vergessen hochzuladen.