![]() |
TCP Client empfangen
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 ![]() Ich hoffe ich hab es etwas verständlich erklärt und das ihr vll ein paar Ideen habt :) Danke im Vorraus MfG Bamer |
AW: TCP Client empfangen
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? |
AW: TCP Client empfangen
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. ![]() EDIT
Delphi-Quellcode:
wollte mal testen wenn ich Bytes benutze da sollte ja eig mehr kommen, aber leider crasht dann die exe :/
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; |
AW: TCP Client empfangen
Indy sind etwas für anspruchsvolle Entwickler. Versuchs mal mit
![]() Sherlock |
AW: TCP Client empfangen
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 |
AW: TCP Client empfangen
Du steckst in
Delphi-Quellcode:
sowohl ein nicht initialisiertes Array als auch den nicht initialisierten Wert i2 (Anzahl zu lesende Bytes). Schau doch nochmal genau wie man das macht:
ReadBytes(..)
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz