AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi UDP - Befehl an Server und Antwort abfragen!!
Thema durchsuchen
Ansicht
Themen-Optionen

UDP - Befehl an Server und Antwort abfragen!!

Ein Thema von Sillium · begonnen am 9. Jul 2005 · letzter Beitrag vom 14. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#1

UDP - Befehl an Server und Antwort abfragen!!

  Alt 9. Jul 2005, 11:20
Erstmal ein Hallo, da ich ja neu hier bin!

Ich lerne seit kurzem Delphi 7. Und da ich am besten lerne, wenn ich einfach ausprobiere, hab ich mich gleich mal daran gewagt ein kleine Programm zu schreiben, was mir die Serverdaten von einem Half-Life server abfragt.

Bis jetzt hab ich durch lesen hier und in anderen Foren mir folgenden Code zusammengebastelt.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,
  IdUDPClient, XPMan;

type
  TIdSocketHandle = THandle;

type
  TForm1 = class(TForm)
    IdUDPClient1: TIdUDPClient;
    IdUDPServer1: TIdUDPServer;
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    XPManifest1: TXPManifest;
    procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      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: TStream;
  ABinding: TIdSocketHandle);
var x:string;
begin
AData.Position:=0;
SetLength(x,AData.Size);
AData.ReadBuffer(x[1],AData.Size);
memo1.Lines.Add(x)
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
IdUDPClient1.Send('255.255.255.255',27015,'ÿÿÿÿTSource Engine Query') //<-----Diesen befehl muß amn an den Server senden!!;
end;

end.
Allerdings wird kein UDPRead Ereigniss ausgelöst, obwohl ich vom Server eine Antwort erhalte. Das hab ich mit Sniff'em überprüft.

Wenn ich das ganze über den Port 32 oder 33 mach, dann wird ein UDPRead ausgelöst und in meinem Memo1 habe ich die abgeschickte nachricht stehen.

Danke schonmal für eure Hilfe!!

[edit=alcaeus]"[Hilfe]" aus dem Titel entfernt. Mfg, alcaeus[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: [HILFE] UDP - Befehl an Server und Antwort abfragen!!

  Alt 9. Jul 2005, 11:23
Hi,

erstmal: Herzlich Willkommen in der Delphi-Praxis.

sorry, falls ich nicht richtig gelesen habe, aber irgendwie finde ich keine Frage bei dem Post

Vllt. reagiert der Server ja nur auf dem Port 32 bzw. Port 33.


Achso, würdest du bitte das [Hilfe] aus dem Titel entfernen? Hilfe brauchen wir hier alle. Danke
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#3

Re: [HILFE] UDP - Befehl an Server und Antwort abfragen!!

  Alt 9. Jul 2005, 11:34
Sorry, vielleicht etwas undeutlich.

Also um eine Anfrage an einen Half-Life Server zu schicken muß man den Port 27015 benutzen.

wenn ich Port 32 oder 33 benutze bekomme ich keine Antwort von dem Half-Life Server sondern in der Memo1 steht dann genau der String, den ich losgeschickt habe (ÿÿÿÿTSource Engine Query). Hier liest der UDPServer die Nachricht, die der Client gesendet hat.

Mein Problem ist, daß wenn ich über Port 27015 sende ich eine Antwort vom Server bekomme, aber mein UDPServer sie nicht liest. Ebenso liest er auch nicht die Nachricht vom Client, wie wenn ich über Port 32 oder 33 schicke.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#4

Re: [HILFE] UDP - Befehl an Server und Antwort abfragen!!

  Alt 10. Jul 2005, 15:31
ein broadcast (255.255.255.255) ist ungünstig. dieser funktioniert nur in deinem lan und dadurch empfängt dein client auch die msg erneut. der server der auf port 27015 laeuft schluckt die msg.
deine msg die du schickst sieht auf den ersten blick nicht richtig aus.

wenn du einen hl server abfragen willst solltest du das neue protokoll verwenden.
hierzu hatte valve vor kurzen was in der mailing liste geschrieben:

Zitat:
HL1 Engine Master Server Query Protocol

These changes bring the HL1 engine's querying protocol in line with that of the Source engine.
If you connect to Steam enabled game servers using a third party tool, you may need to contact the vendor for an update.

* Added a challenge number to A2S_PLAYER and A2S_RULES server queries.
Setting "sv_enableoldqueries" to 1 (currently the default) allows old style (no challenge/response) queries to work
* Changed A2S_INFO server query to require the string "Source Engine Query" appended to the end of the query packet
* Removed support for "info", "infostring", "details", "players" and "rules" queries, use A2S_INFO, A2S_PLAYERS and A2S_RULES instead
bitte denke auch dran das das neue protokoll wegen ddos attacken ein challange response verfahren ist!

valve hat das auch dokumentiert:
http://www.valve-erc.com/srcsdk/Code...erqueries.html

code mässig hab ich das in meinen hlsc-tool (http://www.daddel-mania.de) so geloest:
Delphi-Quellcode:
  IdUDPClient1.Host:='82.149.234.241';
  IdUDPClient1.Port:=27015;

  // a2s_info
  IdUDPClient1.Send(#255#255#255#255+chr($54)+'Source Engine Query'#0);
gruss
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#5

Re: [HILFE] UDP - Befehl an Server und Antwort abfragen!!

  Alt 10. Jul 2005, 17:38
Zitat von generic:
bitte denke auch dran das das neue protokoll wegen ddos attacken ein challange response verfahren ist!

valve hat das auch dokumentiert:
http://www.valve-erc.com/srcsdk/Code...erqueries.html

code mässig hab ich das in meinen hlsc-tool (http://www.daddel-mania.de) so geloest:
Delphi-Quellcode:
  IdUDPClient1.Host:='82.149.234.241';
  IdUDPClient1.Port:=27015;

  // a2s_info
  IdUDPClient1.Send(#255#255#255#255+chr($54)+'Source Engine Query'#0);
gruss
Danke für die Antwort!!

Was bedeutet das challenge response verfahren??

Ich hab mittlerweile einen weg gefunden, die Servernachricht abzufangen und zwar mit

get:= IdUDPClient1.RecievString Bloß ich schaffe es nicht, alles, was nach dem ersten #00 kommt zu filtern ,da er mir nach der #00 den String abricht.


@generic:
Wie löst du denn deinen String auf?
Ich würde den ganzen String stückweise in einer Schleife abarbeiten, und das ausgewertete dann immer löschen. Und dann immer prüfen, wie lang mein String noch ist.
Aber ich komme wie gesagt nicht weiter als bis zur ersten #00!!

Danke schon mal!!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: UDP - Befehl an Server und Antwort abfragen!!

  Alt 10. Jul 2005, 20:32
das #0 sollte nicht notwendig sein, da Delphi selbst null-terminierte strings verwendet - oder?

auf jeden fall hört es sich für mich so an: "da er mir nach der #00 dem ende des strings den String abricht. "

hofe du verstehst, was ich meine?!
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#7

Re: UDP - Befehl an Server und Antwort abfragen!!

  Alt 10. Jul 2005, 20:44
Ja ich verstehe was du meinst!

Ich meine ja auch nicht den gesendeten String, sondern den Empfangenen.

Der ganze String ist etwa 50 Zeichen lang aber an der 10. Stelle oder so steht eine #0 und da bricht er mir den String ab.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: UDP - Befehl an Server und Antwort abfragen!!

  Alt 10. Jul 2005, 20:53
genau das ist es: vielleicht musst du da receivetext noch einmal aufrufen.

Delphi-Quellcode:
get:='';
for i:=0 to 4 do
 get:=get+socket.receivetext;
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#9

Re: UDP - Befehl an Server und Antwort abfragen!!

  Alt 11. Jul 2005, 15:42
ich empfange die response als tmemory stream.
diesen geh ich dann durch um die strings, integer und bytes zu lessen.

bei z.b. a2s_rules kommen meist 2 udp pakete zurück. diese können aber fragmentiert sein.
d.h. du muss diese zwischenspeichern und dann "sortieren".

challenge/Response: der server schickt die ne zahl und schickst du diese nicht zurück dann antwortet er nicht.

die a2s_info funktioniert ohne, aber a2s_rules oder a2s_players benötigt die challenge.
schau doch bitte in die links die ich oben schon geschickt habe. dort ist das dokumentiert.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#10

Re: UDP - Befehl an Server und Antwort abfragen!!

  Alt 13. Jul 2005, 10:21
Hi,

ich hab das schon gelesen mit dieser Antwortzahl. Hänge ich die einfach hinten an odwer mit einem Punkt zwischendrin????

Fragmentiert heisst, dass die Antwort quasi "zerstückelt" ankommt, oder??

Woher weiß ich welches Stück wohin gehört??

Hab einen Weg gefunden, wie ich den response empfange und aus werte und zwar mit:


IdUDPBase.ReceiveBuffer(buffer,length(buffer)); Mein Buffer ist ein Array of char und dann lese ich jeden einzelnen wert aus. Funktioniert ganz gut!

Danke!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:46 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