Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Verbindung mit TCP vom Zusi2-Lokemulator aufnehmen.

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 15.02.2012, 10:21    Titel: Verbindung mit TCP vom Zusi2-Lokemulator aufnehmen. Antworten mit Zitat

Mit welchen Mitteln kann man dieses Programm in Freebasic realisieren ?
Es ist ein Client, der Vebindung zum Server aufnimmt mit Daten und dann auf eine Antwort wartet.
Ich würde mich freuen wenn mich einer mal da genau hinsteuert und welche Programmversion ich wo runterladen kann für die Funktionsverbindung Client zum Server mit Antwort entgegennehmen.

Danke.

Gruss

Code:

Global sData.l,rData.l,verb.l,offs.l,zeile.s, n.l
Global *sbuffer.l, *rbuffer.l

Declare daten_send_empf()
Declare daten_empf()

*sbuffer = AllocateMemory(256)
*rbuffer = AllocateMemory(256)

If InitNetwork() = 0
  End
EndIf

verb = OpenNetworkConnection("127.0.0.1", 1435)

Debug "verb: " + Str(verb)
Debug ""

If verb
  offs = 0 ; HELLO-Befehl
  PokeL(*sbuffer + 0, $0D) : offs + 4
  PokeA(*sbuffer + 4, $00) : offs + 1
  PokeA(*sbuffer + 5, $01) : offs + 1
  PokeA(*sbuffer + 6, $01) : offs + 1
  PokeA(*sbuffer + 7, $02) : offs + 1
  client$ = "Fahrpult"   
  PokeA(*sbuffer + 8, Len(client$)) : offs + 1
  PokeS(*sbuffer + 9, client$,-1, #PB_Ascii) : offs + Len(client$)
  daten_send_empf()
 
  offs=0 ; NEEDED_DATA-Befehl , Befehlsvorrat 00 0A Geschwindigkeit/Motordrehzahl/Fahrstufe
  PokeL(*sbuffer + 0, $06) : offs + 4
  PokeA(*sbuffer + 4, $00) : offs + 1
  PokeA(*sbuffer + 5, $03) : offs + 1
  PokeA(*sbuffer + 6, $00) : offs + 1
  PokeA(*sbuffer + 7, $0A) : offs + 1
  PokeA(*sbuffer + 8, $01) : offs + 1
  PokeA(*sbuffer + 9, $09) : offs + 1
  daten_send_empf()
 
  offs=0 ; NEEDED_DATA-Befehl , Befehlsvorrat 00 00
  PokeL(*sbuffer + 0, $04) : offs + 4
  PokeA(*sbuffer + 4, $00) : offs + 1
  PokeA(*sbuffer + 5, $03) : offs + 1
  PokeA(*sbuffer + 6, $00) : offs + 1
  PokeA(*sbuffer + 7, $00) : offs + 1
  daten_send_empf()
 
  weiter:
    daten_empf()
    Delay(10)
  Goto weiter
 
  CloseNetworkConnection(verb)
EndIf

End

Procedure daten_send_empf()
  Debug ""
  sData = SendNetworkData(verb, *sbuffer, offs)
  Debug "sData: " + Str(sData)

    rData = ReceiveNetworkData(verb, *rbuffer, 256)

    Debug "rData: " + Str(rData)

    zeile$ = ""
    For n = 0 To rData - 1
      zeile$ = zeile$ + RSet(Hex(PeekA(*rbuffer + n)), 2, "0")
      If n < rData - 1
        zeile$ = zeile$ + ":"
      EndIf
    Next n
    Debug zeile$
EndProcedure

Procedure daten_empf()
    Debug ""
    rData = ReceiveNetworkData(verb, *rbuffer, 256)
    Debug "rData: " + Str(rData)

    zeile$ = ""
    For n = 0 To rData - 1
      zeile$ = zeile$ + RSet(Hex(PeekA(*rbuffer + n)), 2, "0")
      If n < rData - 1
        zeile$ = zeile$ + ":"
      EndIf
    Next n
    Debug zeile$
EndProcedure
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 15.02.2012, 10:46    Titel: Antworten mit Zitat

Mit TSNE sollte es funktionieren.

Ein Client beispiel ist dort auch vorhanden.

Im Grunde brauchst du dieses client beispiel nur an deine Bedürfnisse anpassen.
Sollte nicht weiter schwer sein, da die Sources sich ziemlich ähneln.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 15.02.2012, 13:24    Titel: Antworten mit Zitat

Wie kann ich jetzt zb so einen Buffer senden.
Ich sehe im Beispiel nur ein Text der versendet wird.
Ich brauche als erstes 4 0-Stellen und dann die Werte.

Danke.

Code:
 
  PokeL(*sbuffer + 0, $00) : offs + 4
  PokeA(*sbuffer + 4, $00) : offs + 1
  PokeA(*sbuffer + 5, $01) : offs + 1
  PokeA(*sbuffer + 6, $01) : offs + 1
  PokeA(*sbuffer + 7, $02) : offs + 1
  client$ = "Fahrpult"   
  PokeA(*sbuffer + 8, Len(client$)) : offs + 1
  PokeS(*sbuffer + 9, client$, -1, #PB_Ascii)
  offs + Len(client$)
  ;Länge der Daten
  PokeL(*sbuffer + 0, offs - 4)

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 15.02.2012, 13:29    Titel: Antworten mit Zitat

arduno hat Folgendes geschrieben:
Code:
 
  PokeL(*sbuffer + 0, $00) : offs + 4
  PokeA(*sbuffer + 4, $00) : offs + 1
  PokeA(*sbuffer + 5, $01) : offs + 1
  PokeA(*sbuffer + 6, $01) : offs + 1
  PokeA(*sbuffer + 7, $02) : offs + 1


Naja... Im grunde ist TEXT auch nichts anderes als ein Speicherbereich, der Daten beinhaltet.

Du könntest einen Speicher reservieren:
Code:
Dim SBuffer as String


Diesem mit Leerem Text füllen, um ihn auf deine gewünschte größe zu vergrössern
Code:
SBuffer = Space(8) '8Bytes


und dann dort die Werte rein Schreiben
Code:
SBuffer[0] = &H00
'...



alternativ ginge es auch via Chr()
Code:
Dim SBuffer as String
SBuffer = Chr(&H00, &H00, &H00, &H00, &H00, &H01, &H01, &H02)


Oder in der Kompakteren Variante
Code:
Dim SBuffer as String = Chr(&H00, &H00, &H00, &H00, &H00, &H01, &H01, &H02)


Anschliessend kannst du die Variable SBuffer einfach via TSNE_Data_Send übertragen



MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 15.02.2012, 13:35    Titel: Antworten mit Zitat

Jup, danke.

Wo finde ich jetzt diese : TSNE_V3.5 Release

Ich habe nur die 3er.

Danke.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 15.02.2012, 13:37    Titel: Antworten mit Zitat

Die Tuts auch zwinkern

hier is die aktuelle: http://www.freebasic-portal.de/porticula/tsnev3-bi-1459.html


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 15.02.2012, 14:13    Titel: Antworten mit Zitat

Au danke, jetzt kommen Daten zurück vom Zusi2 aber hier als String.
Wie kann ich jetzt die Daten vom String als einzelne Bytewerte printen.
Die Länge habe ich schon mit "Len" rausbekommen.
Mit dem String selbeer kann ich nichts anwenden nur mit dem Bytewert.

danke.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 15.02.2012, 14:18    Titel: Antworten mit Zitat

Naja, wie schon zuvor geschrieben, ist ein String nichts anderes als eine verkettugn von Bytewerten.

Du kannst auf die Einzelnen ByteWerte im String mithilfe dessen Pointer verändern, auslesen, manipulieren.

Code:
Print String[adresse]


Sieht dann z.B. so aus, wenn mal alle Bytes ausgeben möchte
Code:
Dim T as String = "Hallo"
For X as UInteger = 1 to Len(T)
    Print T[X - 1]; " ";
Next
Print

Gibt dir den Dezimalcode (0-255) jedes Bytes aus.

Wichtig ist nur darauf zu achten, das man nicht über die maximale anzahl Bytes im String hinaus adressiert.

Code:
Dim T as String = "ABCD"
Print T[0] 'A
Print T[1] 'B
Print T[2] 'C
Print T[3] 'D
Print T[4] 'Hier würde es krachen



MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 15.02.2012, 14:38    Titel: Antworten mit Zitat

Jup, danke.
Die Daten die zurück sollen stimmen alle.
Der Client funktioniert also wunderbar.

Jetzt nach dem ersten Senden des Clienten und dem Empfang der ersten Daten sendet der Server weitere Datensätze zwischen 12 und 128 Byte die ich auswerten muss. So ca 20x pro Sekunde.

Wie bekomme ich das jetzt hin mit dem Clienten-Befehl ?
Das ist der Befehl zum Senden:
myClient.senden(SBuffer)

Code:

Dim As connectionType myClient = "Client"
Do
    Sleep 30, 1
    myClient.senden(SBuffer)
Loop Until InKey = Chr(27)


Wie muss ich jetzt nur die Datenpakete abfragen ?
Es soll ja jetzt in der Do-Loop noch andere Sachen gemacht werden.
Und es sollen ja keine Datensätze verloren gehen.
Gibt es da irgendwie ein Event oder wie kann man das hinbekommen ?

Danke.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 15.02.2012, 14:52    Titel: Antworten mit Zitat

Nun ... TSNE ist ein sogenanntes Ereigniss gesteuertes Modul.
Das Bedeutet, das Durch eintreten von bestimmten ereignissen Bestimmte dinge ausgeführt werden.

Welche dinge das sind, wird vom Programmierer Definiert.

Es gibt 2 Arten von ereignisse. Das erste ist das, welches durch einen Benutzer ausgeführt wird.

Das zweite ist jedes, das vom gegenüber (dem anderem computer) ausgeführt wird.

Zu 1.
Du startest ein sebstgeschriebens Programm. Daraufhin ruft dieses Programm die Funktion TSNE_Create_Client auf. Dies ist ein Benutzerereigniss.

TSNE erzeugt daraufhin eine verbindung und bereitet noch einige andere digne im hintergrund für den datenempfang vor.


Zu 2.
Ist z.B. die Verbidnugn hergestellt worden, dann ruft TSNE eine Sub-Routine auf, welche zuvor in TSNE_Create_Client definiert wurde (In Client-Beispiel ist dies TSNE_Connected())

In dieser Routine kann dann wiederum der Programmierer seinen eigenen Code hinein schreiben, welcher ausgeführt werden soll, wenn dieses ereigniss eingetreten ist.

Das Gleiche vorgehen ist beim Disconnect oder beim empfang neuer Daten möglich.


Wenn du also ständig neue Daten von einem Server erhällst, wird beim empfang dieser automatisch die TSNE_NewData Sub Routine aufgerufen.

Hier kannst du folglich alles machen, das passieren soll, wenn daten eingehen.


Nebenbei kannst du natürlich auch eine Hauptschleife nach dem TSNE_Create_Client ausführen.

Diese läuft parallel zu alle anderen Ereignissen ab.
Du kannst also Daten in dieser Do-Loop schleife versenden, wärend du gleichzeitig Daten empfängst.

Du kannst auch in der NewData Sub routine daten verschicken, wenn du es magst. es gibt prinzipiell keine Einschränkungen was die handhabung angeht.


Der unterschied zu vielen anderen Netzwerk-Modulen ist die Ereigniss steuerung.
Für manache mag dies ein nachteil sein, für TSNE ist es jedoch ein riesiger vorteil.

So muss man z.B. nicht ständig überprüfen, ob neue Daten vorhanden sind, da TSNE selbstständig die Routine aufruft, ohen das der Programmierer sich damit auseinander setzen muss.


Daten verlohren gehen kann es prinzipiell nicht, wenn du sie nicht ignorierst.
Wie schon geschrieben, ruft TSNE generell bei jedem neu empfangenem Datensatz die entsprechende Routine auf.

Möchtest du z.B. diese Daten in deiner Haupt Do-Loop verarbeiten könntest du folgendermassen vorgehen:

Code:

Dim Shared Global_Daten as String


'verbindung erzeugen ...
Do
    If Global_Daten <> "" Then 'wenn neue daten in der global variable
        Print Global_Daten '... dann ausgeben
        GlobalDaten = "" '... udn variable leeren
    End If
    sleep 10, 1 'kurz warten
Loop


'Die ampfangsroutine
Sub TSNE_New_Data(V_TSNEID as UInteger, ByRef V_Data as String)
Global_Daten += V_Data 'die daten einfach an eine globale variable anhängen
End Sub



Allerdings empfehle ich dir, wenn möglich, die auswertung direkt in der Empfänger routine vorzunehmen. es ist schneller, und code-freundlicher.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 15.02.2012, 16:32    Titel: Antworten mit Zitat

Ein neues Empfangsproblem und Sendeproblem.

Zu erst wird dieses gesendet:
myClient.senden(hello_data)
dann wird auf Daten gewartet, erst wenn die Daten da sind geht es hier weiter:

myClient.senden(needed_data)
dann wird wieder auf Daten gewartet, erst wenn die Daten da sind geht es hier weiter:

myClient.senden(needed_data1)
dann wird wieder auf Daten gewartet, erst wenn die Daten da sind geht es hier weiter:

Dann erst kommt die Schleife, wo die Daten dauernd empfangen werden:
Wie kann man das schreiben in einer Schleife ?

Danke.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 15.02.2012, 16:36    Titel: Antworten mit Zitat

das kannst du z.B. über eienn Globale Statusvariable lösen.

Code:
Dim shared G_Status as UInteger

'verbindungsaufbau

'empfangs sub
sub tsne_new_data(...)
Select Case G_Status
    case 0
        tsne_data_send("hallo! wa gibts?")
        g_status = 1

    case 1
        tsne_data_send("hab verstanden! sosnt noch was?")
        g_status = 2

    case 2
        tsne_data_send("ok. und sonst?")
        g_status = 3

    case 3
        tsne_data_send("jetzt reichts! zurück zu 1")
        g_status = 1

End Select
End Sub


so in der art könnte man es realisieren.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 15.02.2012, 16:48    Titel: Antworten mit Zitat

Es mag helfen, wenn du erwähnst, woher du den Code hast:
Client-Beispiel
Server-Beispiel

Dann kann man sich besser vorstellen, was der Code eigentlich macht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 15.02.2012, 16:54    Titel: Antworten mit Zitat

Jup, da ist der Client her .

Danke.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 16.02.2012, 10:30    Titel: Antworten mit Zitat

Ein problem beim mehrmaligen senden mit Rückantwort.

Zu erst wird dieses gesendet:
myClient.senden(hello_data)
dann wird auf Daten gewartet, erst wenn die Daten da sind geht es weiter.
Das funktioniert komischerweise nur in einer Schleife (mehrmaliger Aufruf), wenn ich den Aufruf vor einer Schleife einmal mache, kommt keine Verbindung zustande.

Hier beim 2 Datensatz versenden bekomme ich keine Antwort vom Server : myClient.senden(needed_data1).

Ist der Client zu Träge mit dem Empfang ?

Wenn ich das bei Purebasic mache , bekomme ich gleich eine Antwort:
Code:

 ; HELLO-Befehl
  PokeL(*sbuffer + 0, $0D)
  PokeA(*sbuffer + 4, $00)
  PokeA(*sbuffer + 5, $01)
  PokeA(*sbuffer + 6, $01)
  PokeA(*sbuffer + 7, $02)
  client$ = "Fahrpult"   
  PokeA(*sbuffer + 8, Len(client$))
  PokeS(*sbuffer + 9, client$,-1, #PB_Ascii)
  SendNetworkData(verb, *sbuffer, 17)
 
 ; NEEDED_DATA-Befehl , Befehlsvorrat 00 0A
  PokeL(*sbuffer + 0, $06)
  PokeA(*sbuffer + 4, $00)
  PokeA(*sbuffer + 5, $03)
  PokeA(*sbuffer + 6, $00)
  PokeA(*sbuffer + 7, $0A)
  PokeA(*sbuffer + 8, $01)
  PokeA(*sbuffer + 9, $09)
  SendNetworkData(verb, *sbuffer, 10)

  ; NEEDED_DATA-Befehl , Befehlsvorrat 00 00
  PokeL(*sbuffer + 0, $04)
  PokeA(*sbuffer + 4, $00)
  PokeA(*sbuffer + 5, $03)
  PokeA(*sbuffer + 6, $00)
  PokeA(*sbuffer + 7, $00)
  SendNetworkData(verb, *sbuffer, 8)


Danke.

GRuss


Zuletzt bearbeitet von arduno am 16.02.2012, 11:26, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 16.02.2012, 10:38    Titel: Antworten mit Zitat

Nutze mal Wireshark oder Etherreal, Ethercap und analysiere den datenverkehr, der ausgeht. Vergleiche ihn mit beiden Programmen. Ich habe das Gefühl, das der Datensatz nicht stimmen könnte.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 16.02.2012, 11:30    Titel: Antworten mit Zitat

Das ist die Antwort vom Purebasicprogramm.
sData ist gesendete Anzahl, rData ist die empfangene Anzahl und die Daten die ich empfangen habe und diese stimmen.

Komisch ist, das die Verbindung in Freebasic nur durch einen mehrmaligen Aufruf zustande kommt und der 2. Aufruf , wenn der erste beantwortet wurde dann nicht mehr ankommt.

Zitat:

verb: 33623496

sData: 17
rData: 7
03:00:00:00:00:02:00

sData: 10
rData: 7
03:00:00:00:00:04:00

sData: 8
rData: 7
03:00:00:00:00:04:00

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 04.03.2012, 19:32    Titel: Antworten mit Zitat

TSNE_V3.5 :
Ich möchte ein Server betreiben und 2 Clienten.

Ich weiss nicht wie ich das mit TSNE_V3.5 realisieren kann?

Der Server soll Daten zum Client1 senden für den Start , damit der Client1 anschliessend dauernd Daten sendet. Der Server soll diese empfangen und dann sofort immer zum Client2 senden. Für mich irgendwie nicht durchführbar, ich finde den Weg nicht.

Kann man mal kurz ein Minibeispiel bringen dafür.

Danke.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 04.03.2012, 19:49    Titel: Antworten mit Zitat

Arbeite dich mal durch dieses Tutorial durch: http://www.freebasic-portal.de/tutorials/netzwerkprogrammierung-tsne-v3-60.html

Dort stehen die grundlagen über TSNE und der Client und Server Architektur drin. Sprich, Welche komponente was macht und wie sich dies auswirkt.

Dir scheinen da nämlich einige informationen zu fehlen, die allerdings für ein solches Konzept nötig sind.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz