Registriert seit: 15. Jul 2005
311 Beiträge
Delphi XE5 Professional
|
Verständnis einer Komponente / Umbau
14. Nov 2006, 11:15
Hallo,
ich wende mich ein weiteres mal verzweifelt an euch.
Ich habe schon in einem anderen Beitrag etwas über ein Programm bzw.komponente verlauten lassen.
Das hier ist nun aber ein anderes und sicher grösseres Problemchen, zumindest für mich.
Es geht um Socket / TCP Komponenten.
Ich versuche einen Bot für das game Anarchy Online zu schreiben.
Offiziell ist nur eine PHP Chat Komponente freigegeben, auf die alles(natürlich PHP) Bots aufbauen.
Nach etwas suchen bin ich auf eine Koponente gestossen, die für Delphi mal geschrieben wurde.
Der Schreiber der Komponente meldet sich für fragen nicht und arbeitet auch nicht mehr weiter an der
Komponente. Zudem gibt es einen Chatclient, der auch die Komponente verwendet.
Er handlet sie aber eben wie nen Chatclient und meins ist da doch etwas umfangreicher.
Habe leider wenig Ahnung von Sockets in Verbindung mit Streams, So richtig fündig werd ich hier zu
meinem Problem leider auch nicht. Bosher kam ich mit Sendtext vollkommen aus.
Es wurden leider auch Fremdkomponenten benutzt, was es für mich noch etwas schwerer macht.
Ein Auszug aus dem Code, der den Datenstrom emfängt:
Delphi-Quellcode:
function TAOChat.ReceivePacket(const Socket: TTCPClientSocket):
TAOChatIncomingPacket;
const
Step = (8*1024)-1; // 16383;
var
PacketType: SmallInt;
PacketSize: SmallInt;
Received: SmallInt;
ReadSize: SmallInt;
Buffer: array[0..Step] of Char;
DataStream: TStream;
Size: Integer;
s: string;
begin
Result := nil;
if (FClient.Socket.State <> ssConnected) or
(FClient.Socket.Negotiating <> False) or
(FClient.Socket.NegotiatingProxy <> nil) then
Exit;
Size := FClient.Socket.Peek(Buffer, 4);
if Size < 4 then
Exit;
FClient.Socket.Read(PacketType, 2);
PacketType := ntohs(PacketType);
FClient.Socket.Read(PacketSize, 2);
PacketSize := ntohs(PacketSize);
DataStream := TMemoryStream.Create;
try
ReadSize := PacketSize;
while DataStream.Position < PacketSize do
begin
if ReadSize > Step + 1 then
Size := Step + 1
else
Size := ReadSize;
Received := FClient.Socket.Read(Buffer, Size);
if Received > 0 then
begin
ReadSize := ReadSize - Received;
DataStream.Write(Buffer, Received);
end;
end;
DataStream.Position := 0;
Result := TAOChatIncomingPacket.Create(PacketType, DataStream);
finally
DataStream.Free;
end;
end;
Wenn ich dagegen in meinem Socket(TClientsocket) im OnRead alleine schon die länge auslese komme ich auf 38 und irgendwie bei dem anderen auf 34. Was in der Function die einzelnen befehle bedeuten weiss ich leider auch nicht so genau.
Das Ergebnis auf meiner Prozedur:
Zitat:
(#0, #0, #0, '"', #0, ' ', '4', 'f', 'f', 'a', '4', '3', '1', '9', 'f', '2', '2', '8', 'd', '3', '9', 'a', '7', 'd', 'c', 'e', '1', '9', 'e', 'f', 'b', 'd', '8', '6', '3', 'b', '4', '0', #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
Ergebnis aus der Original Funktion:
Zitat:
(#0, ' ', '1', '5', '7', '3', '4', '0', '4', '2', 'b', '8', 'b', 'f', '5', 'b', '9', 'e', '9', '9', 'a', 'e', 'f', 'c', 'f', '3', 'd', 'd', '2', 'b', 'b', '3', '2', '9', #20, #0, #0, '—', #20, #0, 'P', #0, #0, #0, #0, #0, #20, #0, #24, 'î', '‘', '|', #0, #0, #0, #0, #8, '—', #20, #0, 'o', '>', '’', #1, 'À', 'Ù', #18, #0, ' ', #1, #20, #0, #16, #0, #0, #0, 'È', '£', #20, #0, 'Ø', #3, #20, #0, '1', #0, #0, #0, '†', 'Ø', '—', '|', #0, #0, #0, #0, #0, #0, #20, #0, 'è', '£', #20, #0, '†', '¶', '’', '|', ' ', #0, #0, #0, 'Ð', 'Ÿ', #20, #0, #0, #0, #20, #0, #5, #0, #0, #0, '†', 'Ø', '—', '|', #24, '�', '•', '|', 'P', #2, #0, #0, 'i', #1, #4, 'P', '†', '¶', '’', '|', #0, #0, #0, #0, '¸', #0, '�', #24, #0, #0, '$', #0, #0, #0, #0, #0, '”', 'Ú', #18, #0, ' ', #1, #20, #0, '¼', 'Ú', #18, #0, 'ä', #0, #19, #0, 'G', #0, #0, #0, 'Ô', #0, #19, #0, #0, #0, #19, #0, '8', #2, #0, #0, '3', 'R', '’', '|', '¼', 'Ú', #18, #0, 'ˆ', '¡', #20, #0, #0, #0, #0, #0, 'ˆ', '¡', #20, #0, '�', '¡', #20, #0, 'X', 'Û', #18, #0, ' ', #16, #19, #0, '1', #0, #0, #0, ' ', #0, #0, #0, '¸', '£', #20, #0, 'ð', 'Û', #18, #0, #0, #0, #0, #0, #0, #0, #0, #0, ' ', #0, #0, #0, 'd', #1, #20, #0, #0, #0, #3, #0, #5, #0, #0, #0, '8', #2, #0, #0, #0, #0, #20, #0, 'P', #2, #0, #0, '}', ']', '’', '|', 't', 'Û', #18, #0, #24, 'î', '‘', '|', '�', '¶', '’', '|', 'ÿ', 'ÿ', 'ÿ', 'ÿ', #0, #0, #0, #0, '„', 'Û', #18, #0, ' ', #1, #20, #0, #8, #6, #20, #0, '†', 'Ø', '—', '|', 'G', #0, #0, #0, #0, #0, #0, #0, #0, #0, #20, #0, '8', #2, #0, #0, '@', 'Û', #18, #0, '`', 'Â', '˜', '|', 'ˆ', '¡', #20, #0, '\', 'Û', #18, #0, 'ˆ', '¡', #20, #0, '�', '¡', #20, #0, #0, #0, #0, #0, #24, #0, #0, #0, #3, #0, #0, #0, ' ', #0, #0, #0, '¸', '£', #20, #0, 'ˆ', '¡', #20, #0, '8', #2, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, 'd', #1, #20, #0, #0, #0, #3, #0, 'Ø', #3, #20, #0, '8', #2, #0, #0, #0, #0, #20, #0, 'p', 'Ù', #18, #0, #24, 'î', '‘', '|', #0, 'Ü', #18, #0, #24, 'î', '‘', '|', '�', '¶', '’', '|', 'ÿ', 'ÿ', 'ÿ', 'ÿ', '†', '¶', '’', '|', #16, 'Ü', #18, #0, '¢', 'Ø', '—', '|', #8, #6, #2
Vllt. steiger ich mich da auch zu sehr in etwas rein, aber es wäre am Ende denke ich so besser als um Fehler rum zu bauen.
Nebenbei die PHP Classe ist im Gegensatz zu der Komponente winzig...
Nen sehr gutes Tutorial für die Sockets in Verbindung mit Streams wäre vllt. auch noch recht hilfreich.
Gruss Cyber
[edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit]
Daniel Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
|