Entwickler-Ecke
Internet / Netzwerk - TSocket Hex Code versenden
pchero - Mi 12.08.09 15:16
Titel: TSocket Hex Code versenden
Guten Nabend,
ich habe eine kleine Frage und zwar connecte ich mittels Socket auf ein Gerät und nun will ich einen Befehl in Hex Format an dieses Gerät schicken. Dieses Gerät antwortet denn auch darauf. Ist ja nichts anderen als mit Socket.ReceiveText das mitzulesen oder brauch ich dafür denn auch einen anderen Befehl?
Hab schon gesucht aber nicht zum Thema Hex Code über Delphi und Socket zu verschicken
Gruß
Narses - Mi 12.08.09 15:20
Moin!
pchero hat folgendes geschrieben : |
| einen Befehl in Hex Format |
Was ist denn ein "Befehl in Hex Format"? :gruebel: Meinst du Binärdaten? Diese könnte man hexadezimal darstellen, falls du das mit "Hex Format" meinst. :nixweiss:
pchero hat folgendes geschrieben : |
| Dieses Gerät antwortet denn auch darauf. Ist ja nichts anderen als mit Socket.ReceiveText das mitzulesen oder brauch ich dafür denn auch einen anderen Befehl? |
Sofern es sich um Binärdaten handelt: ja, das geht.
Kuckst du [
http://www.delphi-library.de/topic_BinaerProtokollTutorial+Sockets+v100+MalChatFiles_66706.html]. ;)
cu
Narses
pchero - Do 13.08.09 08:29
also mit Hex meinte ich ein TCP Paket wo der Datensatz
0b:03:f1(1011:11:11110001) aussieht. Dieses habe ich in Wireshark mitgelesen und dieses Paket mit dem Inhalt will ich selber aus Delphi heraus schicken.
Ich lese aber gleich auc nochmal deine pdf durch und schau ob ich da was finden kann was mir erlaubt den Binärcode zu schicken.
Gruß
p.s.
Also das Verschicken habe ich nun hinbekommen wusste nicht das in Delphi Hex mit $ gemacht wird ich hatte es mit 0x ausprobiert. Somit kann ich die Daten über Chr schicken lassen und in Wireshark erscheint das richtige Paket. Gibt es eine Möglichkeit das er Automatisch einen Hex Code in die EInzelnen Teile pakt und über das Chr jagt ?
Narses - Do 13.08.09 12:25
Moin!
Sorry, aber ich verstehe kein Wort. :nixweiss:
cu
Narses
pchero - Do 13.08.09 12:48
Also ich habe jetzt hinbekommen, das er mir das TCP Paket mit den Daten 0x0b 0x03 0xf1 abschickt.
Dies mache ich jetzt über drei Inputfelder
Delphi-Quelltext
1: 2:
| bin := Chr(strtoint(Hex1.Text))+Chr(strtoint(Hex2.Text))+Chr(strtoint(Hex3.Text)); ClientSocket1.Socket.SendText(bin); |
So nun ist meine Frage, ob man das auch alles in einen Inputfeld machen kann ? oder ob man immer zwangsweise das so in drei Felder trennen muss.
Gruß PcHeRo
Flamefire - Do 13.08.09 16:14
geht mit einem
du nimmst einfach immer 2 zeichen aus einem string und fertig
also so:
Delphi-Quelltext
1:
| for i:=0 to length(S) do bin:=bin+chr(strtoint('$'+copy(s,i*2+1,2))); |
besser aber das ganze mit einem array zu machen...versuch mal mit deiner variante ne 00 zu senden...(chr(0) is textende)
Narses - Do 13.08.09 20:02
Moin!
Flamefire hat folgendes geschrieben : |
| versuch mal mit deiner variante ne 00 zu senden...(chr(0) is textende) |
Wo ist das Problem? Delphi-Strings sind counter-based, nicht 0-terminiert. :idea: ;)
Ansonsten gibt´s auch die Funktionen HexToBin() und BinToHex(). :les:
cu
Narses
pchero - Fr 14.08.09 12:12
Delphi-Quelltext
1:
| for i:=0 to length(S) do bin:=bin+chr(strtoint('$'+copy(s,i*2+1,2))); |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.BtnSendClick(Sender: TObject); var bin : string; i: integer; begin if (ClientSocket1.Active) then begin for i:=0 to length(Hex1.Text) do bin:=bin+chr(strtoint('$'+copy(Hex1.Text,i*2+1,2))); ClientSocket1.Socket.SendText(bin); Log.Lines.Add(bin); end else Log.Lines.Add('Nicht verbunden!'); end; |
sowas ähnliches hatte ich meine ich auch ausprobiert, als ich Überhaupt mit den Hex werten angefangen habe aber diese '$'+ mag er nicht er akzeptiert das denn nicht als hexwert.
also ich möchte z.B in eine Tedit eingeben 0xB9262 und genau diesen block schickt er als Hex ins Netzwerk. Mit drei einzelnen Inputfeldern klappt es ja auch aber ned im gesamten als eine Box.
Wobei es bei Delphi ja ein $ sein muss merkwürdigerweise.
hab auch schon gegoogelt aber auch einges gefunden aber iwie nichts was so richtig hinhaut.
Wenn ich den Hex wert oben über den StrtoInt jage mekert er mir am $ zeichen rum. Oder gibt mir einen Falschen Wert wieder.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var BinMessage: String; function Dump(const S: String): String; var i: Integer; begin Result := ''; for i := 1 to Length(S) do begin Result := Result +IntToHex(Ord(S[i]),2); if ((i mod 12) = 0) then Result := Result +#13#10; end; end; begin BinMessage := Socket.ReceiveText; Log.Lines.Add(IntToStr(Length(BinMessage))+' Zeichen gelesen: '+#13#10+ Dump(BinMessage)); end; |
Bei den Rückgabewerte bekommt er auch iwas durcheinander.
so kommts zurück in
Wireshark:
0c031700d9
Konsole: 5 Zeichen gelesen:
30C17D94331
Ich bin Leider nicht so der profi wenn es um die ganzen Typen Umwandlungen geht und so =/. Aber ich gebe mein besten. Hauptsächlich is das der Code aus Narses Tutorials schonmal gleich vorweg
Gruß
Narses - Fr 14.08.09 12:43
Moin!
Vorab: IIRC hampelst du dabei mit D2009 rum (MAC-Thread), richtig? In diesem Fall sind alle
String-Typen durch
AnsiString zu ersetzen, sonst gibt´s Probleme mit dem Unicode-String! :idea:
pchero hat folgendes geschrieben : |
| also ich möchte z.B in eine Tedit eingeben 0xB9262 und genau diesen block schickt er als Hex ins Netzwerk. |
Der Trick ist, das (für den Leser gedachte) Präfix "0x" oder auch "$" bei der Eingabe wegzulassen (der PC braucht´s eh nicht). Dann könnte das so klappen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.BtnSendClick(Sender: TObject); var hex,bin: String; i: Integer; begin if ClientSocket1.Active then begin bin := ''; hex := Hex1.Text; if Odd(Length(hex)) then hex := '0'+hex; for i := 1 to Length(hex) do bin := bin +Chr(StrToInt('$'+Copy(hex,i*2,2))); ClientSocket1.Socket.SendText(bin); Log.Lines.Add(Hex1.Text); end else Log.Lines.Add('Nicht verbunden!'); end; |
cu
Narses
pchero - Fr 14.08.09 13:12
| Zitat: |
| Exception-Klasse EConvertError mit Meldung "'$" ist kein gültiger Integer-Wert' |
| Zitat: |
| aber diese '$'+ mag er nicht |
Die Meldung hatte ich schon einge mal Als ich ausprobiert habe wie ich das noch hinbekommen könnte und ist meine ich auch die selbe die ich vorher auch hatte.
Ja genau der bin ich. Aber soweit ich es sehen kann setzte ich ja keine Stringsvorab. Somit kann ich auch kein Problem damit haben außer einmal das " $ " oder muss ich da auch einen Ansistring vorsetzen ?
Und das es mit der Rückgabe nicht klappt war mir klar ;) hatte es vergessen wieder rauszunehmen.
Gruß
Narses - Fr 14.08.09 13:14
Moin!
Ups, die Schleife läuft ja viel zu weit: :oops:
Delphi-Quelltext
1:
| for i := 1 to Length(hex) shr 1 do |
cu
Narses
pchero - Fr 14.08.09 13:37
Net schlimm Narses kann jedem mal passieren =) immerhin kansnt du mir lösungwege nennen und sitzt nicht wie ich mich halbwissen davor ;)
Also hab eben deine Korrecktur noch mit reingenommen aber aus
0B03F1
wird
b03f01
also die gute Nachricht ist er erfindet die Werte schonmal nicht. Aber er mixt sie durch. Wobei ich da kein Muster erkenne wie er dies macht.
Gruß und schonmal sehr vielen dank für deine Hilfen Narses =)
Narses - Fr 14.08.09 13:56
Moin!
:autsch:
Delphi-Quelltext
1: 2:
| for i := 0 to (Length(hex) -1) shr 1 do bin := bin +Chr(StrToInt('$'+Copy(hex,(i shl 1) +1,2))); |
Was tue ich hier eigentlich :roll: (ich hätte HexToBin() genommen :?)
cu
Narses
pchero - Mo 17.08.09 09:18
Danke Narses das Sende klappt nun richtig =) ich habe eben mich nochmal mit deinem Tutorial beschäftigt und durchgelesen und so. Momentan häng ich an der Empfangsroutine von dir fest. Ja ich habe sie durchgelesen und versucht
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var BinMessage: String; function Dump(const S: String): String; var i: Integer; begin Result := ''; for i := 1 to Length(S) do begin Result := Result +IntToHex(Ord(S[i]),2); if ((i mod 12) = 0) then Result := Result +#13#10; end; end; begin BinMessage := Socket.ReceiveText; Log.Lines.Add(IntToStr(Length(BinMessage))+' Zeichen gelesen: '+#13#10+ Dump(BinMessage)); end; |
Und es sieht noch so von dir aus kopiet aus, da ich nicht die Stelle finde, die die Reihenfolge ändert. Also das Datenpaket was ich in Wireshark mitsniffe wird anders in der Box dargestellt. Und zwar auch wieder das einfach nur ein paar Zeichen vertauscht sind.
Gruß PcHeRo
und vielen dank an Narses für seine Hilfe =)=)
Narses - Mo 17.08.09 09:49
Narses hat folgendes geschrieben : |
| IIRC hampelst du dabei mit D2009 rum (MAC-Thread), richtig? In diesem Fall sind alle String-Typen durch AnsiString zu ersetzen, sonst gibt´s Probleme mit dem Unicode-String! :idea: |
pchero - Mo 17.08.09 10:18
das hatte ich auch schon gemacht, einmal alle Strings zu ansistring umgeändert aber dann kommt das bei raus:
Quelltext
1: 2: 3: 4: 5:
| 0B03F1 35 Zeichen gelesen: 484161616101000000000000 0000000000C6000000000000 0000000000000000000000 |
Also noch weiter vom eigentlich weg. =(
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var BinMessage: Ansistring; function Dump(const S: ansistring): ansistring; var i: Integer; begin Result := ''; for i := 1 to Length(S) do begin Result := Result +IntToHex(Ord(S[i]),2); if ((i mod 12) = 0) then Result := Result +#13#10; end; end; begin BinMessage := Socket.ReceiveText; Log.Lines.Add(IntToStr(Length(BinMessage))+' Zeichen gelesen: '+#13#10+ Dump(BinMessage)); end; |
Gruß PcHeRo
Narses - Mo 17.08.09 11:04
Moin!
Tja, hier stellt sich jetzt zunächst die Frage: Was sollte denn eigentlich dabei rauskommen (zweifelsfrei)? Ich vermute, du testest direkt am offenen Herzen (also mit diesem "Gerät", was auch immer das ist). :nixweiss:
Mach mal zum Test eine Verbindung zwischen zwei Delphi-Programmen. Wie sieht das da aus?
cu
Narses
pchero - Mo 17.08.09 11:29
also es soll rauskommen:
Es kommt bei raus:
Das was dabei richtig rauskommen soll, lese ich immer mit Wireshark mit. Daher weiß ich auch, das dies oben Falsch ist, was er mir ausgibt.
Die Gesamte Communcation läuft über Hex ab ;). Dies wird in ein TCP Paket gepackt und dahin gesendet. Das Gerät schickt ein TCP Paket zurück, auch mit HEX Werten, wo drinne steht wie es ihm geht und all solche Status-sachen.
Das mit den zwischen 2 PC probier ich gleich mal aus.
Gruß PcHeRo
Flamefire - Mo 17.08.09 14:03
wie sendest du?
als string (also nicht ansistring)?
dann versuch das ganze mal als string zu empfangen und sag, was er ausgibt.
es sieht nämlich so aus, als wären da die endianformate und stringteile vermischt...
Gesendet:
0C03 1700 D9
empfangen:
030C 0017 00D9 4331
also: die 4331 kommt weil 2x "00" fehlt-->2 bytes zu viel gelesen
und durch falsche endianess wird aus 0C03 dann halt 030C
pchero - Mo 17.08.09 14:37
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| procedure TForm1.BtnSendClick(Sender: TObject); var hex,bin: String; i: Integer; begin if ClientSocket1.Active then begin bin := ''; hex := Hex1.Text; if Odd(Length(hex)) then hex := '0'+hex; for i := 0 to (Length(hex) -1) shr 1 do bin := bin +Chr(StrToInt('$'+Copy(hex,(i shl 1) +1,2))); ClientSocket1.Socket.SendText(bin); Log.Lines.Add(hex); end else Log.Lines.Add('Nicht verbunden!'); end;
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var BinMessage: ansistring; function Dump(const S: ansistring): ansistring; var i: Integer; begin Result := ''; for i := 1 to Length(S) do begin Result := ansistring(Result +IntToHex(Ord(S[i]),2)); if ((i mod 12) = 0) then Result := ansistring(Result +#13#10); end; end; begin BinMessage := ansistring(Socket.ReceiveText); Log.Lines.Add(IntToStr(Length(BinMessage))+' Zeichen gelesen: '+#13#10+ Dump(BinMessage)); end; |
so hatte ich es schon ausprobiert, also den Tipp von Narses gefolgt. Hat aber nicht geholfen. Also habe ich wieder alles mit Ansi weggenommen ;)
Wenn ich es NUR als String empfange kommen nur Striche ? Ist ja auch logisch oder wie meinst du das Flamefire? Ich sende im im Unicode Format glaube ich. Aber das macht für das Gerät meine ich keinen Unterschied wie es antwortet. Ich lese wie gesagt immer in Wireshark mit, da ich sonst die Fehler ja nicht sehen würde und weiß daher auch wenn was Falsches ausgegeben wird oder zurück kommt.
Die Erklärung Flamefire klingt gut. Aber weißt du woher sowas kommen kann? Wieso gibt es in Delphi keine Funktion das ich jetzt einfach das Paket was zurückkommt ausgeben kann. Also eine den Socket.ReceiveText ausgeben lassen kann ? Ohne viel daran rumzubasteln? In wireshark geht das doch auch so leicht.
Oder habe ich deins als String Empfangen falsch umgesetzt ?
Delphi-Quelltext
1: 2:
| BinMessage := string(Socket.ReceiveText); /Auch ansistring probiert da kam aber iwas mit HAaa| oder so Log.Lines.Add(BinMessage); |
Gruß PcHeRo
Narses - Mo 17.08.09 15:09
Moin!
Ich halte das für ein Unicode-Problem mit D2009. Hast du eine andere Delphi-Version (<D2009) zur Hand? Dann teste das mal damit. IIRC gab´s da ein Problem mit den Socket-Kompos in D2009 beim Empfang von Strings, weil die Unit intern den generischen String verwendet und hier schon die Daten ruiniert, da hilft dann der Umstieg von .ReceiveText() auf .ReceiveBuf().
Leider scheinst du aber auch nicht wirklich zu wissen, was du da eigentlich tust, das macht es nicht gerade einfacher. :?
pchero hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.BtnSendClick(Sender: TObject); var hex,bin: String; i: Integer; begin if ClientSocket1.Active then begin bin := ''; hex := Hex1.Text; if Odd(Length(hex)) then hex := '0'+hex; for i := 0 to (Length(hex) -1) shr 1 do bin := bin +Chr(StrToInt('$'+Copy(hex,(i shl 1) +1,2))); ClientSocket1.Socket.SendText(bin); Log.Lines.Add(hex); end else Log.Lines.Add('Nicht verbunden!'); end; | |
Das hier kann unter D2009 auf keinen Fall korrekt funktionieren, da du keinen AnsiString deklariert hast und der Socket dann definiv falsche Daten abschickt!
pchero hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var BinMessage: ansistring; function Dump(const S: ansistring): ansistring; var i: Integer; begin Result := ''; for i := 1 to Length(S) do begin Result := ansistring(Result +IntToHex(Ord(S[i]),2)); if ((i mod 12) = 0) then Result := ansistring(Result +#13#10); end; end; begin BinMessage := ansistring(Socket.ReceiveText); Log.Lines.Add(IntToStr(Length(BinMessage))+' Zeichen gelesen: '+#13#10+ Dump(BinMessage)); end; | |
Der Typecast kann da nix mehr retten, wenn der String wie oben erwähnt schon nicht mehr korrekt aus der Sockets-Unit kommt (s.o.). :idea:
pchero hat folgendes geschrieben : |
| so hatte ich es schon ausprobiert, also den Tipp von Narses gefolgt. Hat aber nicht geholfen. Also habe ich wieder alles mit Ansi weggenommen ;) |
Nochmal: in D2009 muss das garantiert immer ein AnsiString sein (für Binärdaten im String), sonst wird das garantiert nie richtig funkionieren! :idea:
pchero hat folgendes geschrieben : |
| Wenn ich es NUR als String empfange kommen nur Striche ? [...] Ich sende im im Unicode Format glaube ich. Aber das macht für das Gerät meine ich keinen Unterschied wie es antwortet. |
Man kann keine Daten "als nur String" oder als "Hex" oder sowas empfangen, das sind einfach Binärdaten, die du in einen Memory-Container schreibst. :roll: Und es wird für das ominöse "Gerät" auch ganz sicher eine unglaublich wichtige Rolle spielen, ob du Unicode-Daten aus dem String sendest oder nicht - weil es eben Binärdaten sind. Jetzt verrat uns doch einfach mal, was das für ein Gerät ist. :nixweiss:
pchero hat folgendes geschrieben : |
| Wieso gibt es in Delphi keine Funktion das ich jetzt einfach das Paket was zurückkommt ausgeben kann. Also eine den Socket.ReceiveText ausgeben lassen kann ? Ohne viel daran rumzubasteln? In wireshark geht das doch auch so leicht. |
Man kann grundsätzlich keine Binärdaten "einfach so ausgeben", weil da Zeichen enthalten sind, die man nicht darstellen kann. Deshalb muss man das z.B. in hexadezimale Darstellung umwandeln (was der Kabelhai übrigens auch tut, das ist nix anderes).
pchero hat folgendes geschrieben : |
Oder habe ich deins als String Empfangen falsch umgesetzt ?
Delphi-Quelltext 1: 2:
| BinMessage := string(Socket.ReceiveText); /Auch ansistring probiert da kam aber iwas mit HAaa| oder so Log.Lines.Add(BinMessage); | |
Dieses Stück Code nutzt nix, da die Daten möglicherweise bereits nicht korrekt vom Socket gelesen werden. Probier das mal so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var BinMessage: AnsiString; Len: Integer; begin Len := Socket.ReceiveLength; SetLength(BinMessage,Len); if (Len > 0) then Socket.ReceiveBuf(PAnsiChar(BinMessage)^,Len); Dump(BinMessage)); |
cu
Narses
pchero - Mo 17.08.09 15:38
Danke Narses dein Code ganze Unten hat jetzt hingehauen :D
eigentlich müsste ich unter das Programm schon fast deinen Namen druntersetzen :lol: :oops:
Bei den Geräten handelt es sich um Netzwerkgeräte, die Unterschiedliche Sachen erledigen können. Einfache Geräte die nur Discrete In und Outputs haben, bis hin zu PA Wandler oder Video Decoder und Encoder. Den Status des Gerätes kann man über Abfragen, in dem man ein HEX Paket dahinschickt, dieser dann auf dieses Antwort. Das ganze ist von einem Praktikum bei der Lufthansa Technik. Allerdings warend ie Aufgaben die sie mir aufgegeben haben ned grade die leichtesten und wollte ned hingehen und sagen: Hab ich ned hinbekommen :oops:
Da ich mich hier für eine Ausbildung als Elektroniker für Luftfahrttechnsiche Systeme machen will.
Aber jetzt klappt es =) Vielen dank An Narses =)
Und wie ich festgestellt habe wir Delphi nie meine Sprache werden. Ich bleibe da doch lieber bei PHP. :twisted:
Ist zwar keine richtige Sprache aber leichter. Und ich habe die ganzen Probleme mit den Typen nicht. Deklariert sich alles von Alleine :lol: :lol:
Gruß PcHeRo
Narses - Mo 17.08.09 15:54
Moin!
pchero hat folgendes geschrieben : |
| Danke Narses dein Code ganze Unten hat jetzt hingehauen |
Na fein, dann haben wir´s ja endlich. ;) Markierst du den Thread noch entsprechend, wenn dein Problem erledigt ist? Danke. :)
pchero hat folgendes geschrieben : |
Das ganze ist von einem Praktikum bei der Lufthansa Technik. Allerdings warend ie Aufgaben die sie mir aufgegeben haben ned grade die leichtesten und wollte ned hingehen und sagen: Hab ich ned hinbekommen :oops:
Da ich mich hier für eine Ausbildung als Elektroniker für Luftfahrttechnsiche Systeme machen will.
[...]
Und wie ich festgestellt habe wir Delphi nie meine Sprache werden. Ich bleibe da doch lieber bei PHP. :twisted:
Ist zwar keine richtige Sprache aber leichter. Und ich habe die ganzen Probleme mit den Typen nicht. Deklariert sich alles von Alleine |
Du solltest dich wirklich dringend mal mit Datentypen beschäftigen, das mag auf den ersten Blick nicht einfach zu verstehen sein - aber sonst steige ich nie wieder in einen LH-Flieger! :mahn: :rofl:
PHP kennt auch Datentypen, aber - in diesem Fall: leider - macht der Interpreter automatisch kontextabhängige Typkonversion, so dass man darauf nicht unbedingt immer achten muss. :roll: Kurz: du wirst nicht drum rum kommen. :P
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!