AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TCP Client empfangen
Thema durchsuchen
Ansicht
Themen-Optionen

TCP Client empfangen

Ein Thema von Bamer · begonnen am 1. Feb 2017 · letzter Beitrag vom 2. Feb 2017
Antwort Antwort
Bamer

Registriert seit: 29. Nov 2012
Ort: Pforzheim
5 Beiträge
 
Delphi 7 Personal
 
#1

TCP Client empfangen

  Alt 1. Feb 2017, 17:49
Guten Abend,

ich komme leider gar nicht weiter ich versuche schon den ganzen Tag herrauszufinden wie ich etwas mit dem Client empfangen kann.

Delphi-Quellcode:

procedure TForm1.sendBefehl(Befehl: string);
var Packet: Array of Byte;
    bytes: TIdBytes;
    i:integer;
begin
  SetLength(Packet, 13 + length(Befehl));
  SetLength(bytes, 13 + length(Befehl));
  for i:=1 to 11 do //Von Valve vorgegeben =0
    begin
      Packet[i]:=0;
    end;
  Packet[0] := 9 + length(Befehl); //Packet Size
  Packet[8] := 2; // Packet Type (SERVEREXEC)
  Packet[19] := 0; // Null terminator

  for i:=12 to (length(Befehl)+11) do //Befehl in die Packet schreiben
    begin
      Packet[i] := TEncoding.Default.GetBytes(Befehl[(i-11)])[0];
    end;
  move(Packet[0], bytes[0], 13 + length(Befehl)); //Packet in TIdBytes zum versenden
  idTCPClient1.IOHandler.Write(bytes); //senden
  Memo1.Lines.Add(IntToStr(idTCPClient1.IOHandler.ReadByte)) //<-----Hier
end;

Ich sende dies an einen CSGO Server einen RCON Befehl der alle Bots kicken soll, das funktioniert auch.
Der Server schickt mir auch eine Antwort die ich mit Wireshark mir angeschaut habe, aber mit dem Befehl den ich benutze bekomme ich als Antwort "10"
Obwohl sie Kicked Bot ... ... heissen sollte.

Hier der Auszug von Wireshark wo der Server mir eine Antwort
https://gyazo.com/42a46ce76955ff366fb77cb3a242ffca



Ich hoffe ich hab es etwas verständlich erklärt und das ihr vll ein paar Ideen habt

Danke im Vorraus


MfG Bamer
Mathias
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TCP Client empfangen

  Alt 1. Feb 2017, 17:57
Ich denke doch dass ein Befehl mit dem Namen "ReadByte" auch nur ein einziges Byte liest.

Du willst doch wohl, ebenso wie du das mit deinem Request gemacht hast, einen Haufen Bytes der Text enthält, empfangen. Hier wäre die Frage ob die Antwort vom Server hierauf jetzt eine feste Anzahl von Bytes ist oder ob z.B. das erste Byte (deine "10") angibt wieviele Bytes noch folgen sollen.

Was sagt die Doku zu CSGo-Servern?
  Mit Zitat antworten Zitat
Bamer

Registriert seit: 29. Nov 2012
Ort: Pforzheim
5 Beiträge
 
Delphi 7 Personal
 
#3

AW: TCP Client empfangen

  Alt 1. Feb 2017, 18:32
Also ich habe keine Ahnung wieso eine 10 kommt

Ich habe 2 Antworten vom CSGO Server bekommen.

Einmal die Länge 1412 und einmal 260.

https://developer.valvesoftware.com/..._and_Responses <- Meinst du das mit Doku? Daraus werd ich auch nicht schlau es hat mir beim senden geholfen aber beim empfangen nicht


EDIT
Delphi-Quellcode:
procedure TForm1.sendBefehl(Befehl: string);
var Packet: Array of Byte;
    Packet2: Array of Byte;
    bytes: TIdBytes;
    bytes2: TIdBytes;
    i:integer;
    i2:integer;
begin
  SetLength(Packet, 13 + length(Befehl));
  SetLength(bytes, 13 + length(Befehl));
  for i:=1 to 11 do //Von Valve vorgegeben =0
    begin
      Packet[i]:=0;
    end;
  Packet[0] := 9 + length(Befehl); //Packet Size
  Packet[8] := 2; // Packet Type (SERVEREXEC)
  Packet[19] := 0; // Null terminator

  for i:=12 to (length(Befehl)+11) do //Befehl in die Packet schreiben
    begin
      Packet[i] := TEncoding.Default.GetBytes(Befehl[(i-11)])[0];
    end;
  move(Packet[0], bytes[0], 13 + length(Befehl)); //Packet in TIdBytes zum versenden
  idTCPClient1.IOHandler.Write(bytes); //senden
  idTCPClient1.IOHandler.ReadBytes(bytes2,i2,true);
  Memo1.Lines.Add(IntToStr(High(bytes2)));

  move(bytes2[0], packet2[0], High(bytes2));
  for i2:=0 to High(bytes2) do
    begin
      Memo1.Lines.Add(IntToStr(packet2[i]));
    end;


  //Memo1.Lines.Add (idTCPClient1.IOHandler.ReadLn());
end;
wollte mal testen wenn ich Bytes benutze da sollte ja eig mehr kommen, aber leider crasht dann die exe :/
Mathias

Geändert von Bamer ( 1. Feb 2017 um 18:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TCP Client empfangen

  Alt 2. Feb 2017, 06:48
Indy sind etwas für anspruchsvolle Entwickler. Versuchs mal mit Overbytes ICS, das ist deutlich intuitiver, und IMHO näher an Delphis Eventmodell.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
kompi

Registriert seit: 27. Apr 2012
Ort: Duisburg
54 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TCP Client empfangen

  Alt 2. Feb 2017, 08:11
Ich habe vor kurzem auch die Indy Komponente TCP Client benutzt.

Um eine Antwort vom Server auswerten zu können, muss man erst mal etwas warten. Dies kann man mit checkfordataonsource des IO - Handlers machen. Als Parameter kann man die Wartezeit angeben. Die Antworten vom Server landen bei mir 9im Inputbuffer, den man sehr bequem mit der Methode inputbufferasstring auslesen kann. Zusätzlich kann man hier noch einen Parameter zum Encoding angeben.

Ich hoffe, so funktioniert es.

Gruß Kompi
Detlef Schmitz
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: TCP Client empfangen

  Alt 2. Feb 2017, 09:03
Du steckst in ReadBytes(..) sowohl ein nicht initialisiertes Array als auch den nicht initialisierten Wert i2 (Anzahl zu lesende Bytes). Schau doch nochmal genau wie man das macht:

http://www.indyproject.org/docsite/h...r@boolean.html
  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 12:54 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