[TCP Tool Help] Abgeschlossen

  • Moin [Blockierte Grafik: http://www.elitepvpers.com/forum/images/smilies/wink.gif]
    Ich soll für meinen Lehrer ein kleines TCP-Tool schreiben...
    (Client/Server Prinzip)

    Der Server soll halt die ganze Zeit auf kommandos lauschen und diese dann ,wenn definiert, umwandeln... Soweit bin ich auch schon [Blockierte Grafik: http://www.elitepvpers.com/forum/images/smilies/biggrin.gif]

    Der Client halt nur senden...
    ---------------------------------------------------

    Jetzt die erste Frage:
    Wie schaffe ich es dass ich MEHRERE Server steuern kann?
    Also dass ich vom Client 1 Kommando sende aber JEDER lauschende Server dieses dann ausführt..?

    Und die zweite Frage:
    Ich will beim Client die verbundenen Server in einer Listenansicht (ListView) anzeigen lassen!
    Wie realisiere ich das?

    ---------------------------------------------------

    Derjenige der mir ein komplettes System mit nur ner "msgBox" funktion schreibt, kriegt 10€ psc / egold / überweisung.... dazu aber bitte pn schreiben... muss halt immer und stabil laufen...

    Einmal editiert, zuletzt von xSnake (22. Februar 2013 um 07:19)

  • 1. Wenn du nicht vor hast deinen eigenen Beitrag zu deinem Projekt zu leisten ist das völlig in Ordnung, aber dann ist dieser Thread im falschen Forum. Falls das also so sein sollte, dann gehört das in "Programmieranfragen - mit Gegenleistung". ;)
    Wir können dir aber auch gerne "Hilfe & Unterstützung" bei deinem Vorhaben leisten :).
    2. Kann es sein, dass du Server und Client verwechselst? Es klingt nämlich ein wenig seltsam wenn sich mehrere Server zu einem einzelnen Clienten verbinden wo sie alle aufgelistet werden :S. Oder hat der Client tatsächlich die einzelnen Adressen von jedem Server?

  • 1. Wenn du nicht vor hast deinen eigenen Beitrag zu deinem Projekt zu leisten ist das völlig in Ordnung, aber dann ist dieser Thread im falschen Forum. Falls das also so sein sollte, dann gehört das in "Programmieranfragen - mit Gegenleistung". ;)
    Wir können dir aber auch gerne "Hilfe & Unterstützung" bei deinem Vorhaben leisten :).
    2. Kann es sein, dass du Server und Client verwechselst? Es klingt nämlich ein wenig seltsam wenn sich mehrere Server zu einem einzelnen Clienten verbinden wo sie alle aufgelistet werden :S. Oder hat der Client tatsächlich die einzelnen Adressen von jedem Server?


    Oh, wenn ich in die falsche Sektion poste, tuts mir leid... dachte wegen den Fragen (siehe post) wäre ich hier richtig...
    Also-

    1.Joar ich würd halt nen 10er rausrücken aber dafür müsste das alles dann auch stabil laufen..
    2. Ich habs so gelernt dass der Client die Server steuert... ;o bin ich falsch? (omg)

    Also ich hätte es gerne so dass ich einen "Master" habe der viele "Schul-PCs" steuern soll... Beispielsweise herunterfahren soll...
    Diese Schul PCs sollen halt alle auf Kommandos vom Master lauschen...
    Und am besten wärs wenn alle lauschenden- in einer liste beim "Master" angezeigt werden ;O

    Danke erstma für die schnelle Antwort ;)

  • Zitat

    Oh, wenn ich in die falsche Sektion poste, tuts mir leid... dachte wegen den Fragen (siehe post) wäre ich hier richtig...

    Das hängt davon ab ob du bereit bist Eigeninitiative zu zeigen ;).

    Du kannst einen Server vom Client aus steuern und umgekehrt. TCP braucht nur eine Verbindung um in beide Richtungen Daten verschicken zu können (sogar zeitgleich, wenn auch nicht unbedingt mit AutoIt).
    Es ging mir eher um den Verbindungsaufbau. Die Stelle dessen Adresse bekannt ist sollte man als Server wählen, weil der Aufbau immer von einer Stelle gestartet wird die aber die Adresse der Gegenstelle dafür braucht. Der Server wartet nur bis sich etwas verbindet, die Adressen der Clienten können ihm egal sein.
    Außerdem muss der Server natürlich bereits laufen wenn der Client sich verbinden will.

    Edit: @chess Dann poste es doch ^^. Ich hab auch noch ein Script in der Art rumliegen, es aber nie ausgiebig getestet. Im Grunde könnte man jedes chatartige TCP Script zu so etwas umfunktionieren...

  • Ich habe genau sowas (Auch für Schulzwecke) hier irgendwo rumfliegen. ^^
    Primär zwar für was anderes gedacht (Code-Snippets im Netzwerk verteilen), aber man kann auch Au3/CMD-Befehle ausführen.

    Wenn's das auch tut, kann ich dir das später posten...

    chess

    Gerne doch :)

    Das hängt davon ab ob du bereit bist Eigeninitiative zu zeigen ;).

    Du kannst einen Server vom Client aus steuern und umgekehrt. TCP braucht nur eine Verbindung um in beide Richtungen Daten verschicken zu können (sogar zeitgleich, wenn auch nicht unbedingt mit AutoIt).
    Es ging mir eher um den Verbindungsaufbau. Die Stelle dessen Adresse bekannt ist sollte man als Server wählen, weil der Aufbau immer von einer Stelle gestartet wird die aber die Adresse der Gegenstelle dafür braucht. Der Server wartet nur bis sich etwas verbindet, die Adressen der Clienten können ihm egal sein.
    Außerdem muss der Server natürlich bereits laufen wenn der Client sich verbinden will.

    Edit: @chess Dann poste es doch ^^. Ich hab auch noch ein Script in der Art rumliegen, es aber nie ausgiebig getestet. Im Grunde könnte man jedes chatartige TCP Script zu so etwas umfunktionieren...

    Klar!

    Okay... Soweit ungefähr verstanden...
    Also sind die Programme die auf den "Schüler-PCs" aktiv sind die Clients ja? 8|


    Wie ist das mit noip oder dyndns? brauch man das um eine stabile verbindung zu haben?
    Mir ist wichtig dass der "Master-pc" jederzeit Verbindung herstellen kann und die "Schüler-PCs" steuern kann solange diese aktiv sind...
    Die Schüler-PCs sollen nur lauschen..
    In der Listview/box soll der master dann sehen wieviele bzw. welche schülerpcs verbunden sind...

  • Ich würde eher den Haupt PC als Server wählen und die Clienten so konfigurieren, dass sie eine Verbindung zum Server aufbauen sobald soe online sind. Ansonsten musst du zu allen PCs die online sein könnten in regelmäßigen Abständen Verbindungsversuche starten um herauszufinden ob sie laufen oder nicht. Die Verbindung kann ja die ganze Zeit aktiv sein, deshalb müssen ja nicht ununterbrochen Daten gesendet werden ;). Und da es sich um ein lokales Netzwerk handelt (davon gehe ich aus?) brauchst du kein dynDNS o.Ä. sondern nur die IP des Haupt PCs. Die darf allerdings dann nicht dynamisch zugewiesen werden sondern muss immer gleich bleiben.

  • Ich würde eher den Haupt PC als Server wählen und die Clienten so konfigurieren, dass sie eine Verbindung zum Server aufbauen sobald soe online sind. Ansonsten musst du zu allen PCs die online sein könnten in regelmäßigen Abständen Verbindungsversuche starten um herauszufinden ob sie laufen oder nicht. Die Verbindung kann ja die ganze Zeit aktiv sein, deshalb müssen ja nicht ununterbrochen Daten gesendet werden ;). Und da es sich um ein lokales Netzwerk handelt (davon gehe ich aus?) brauchst du kein dynDNS o.Ä. sondern nur die IP des Haupt PCs. Die darf allerdings dann nicht dynamisch zugewiesen werden sondern muss immer gleich bleiben.

    Danke... klingt gut... So würd ichs machen ;o

  • Dann hau rein :P. Du kannst ja, bis chess sein Script postet, mal anfangen dich mit TCP auseinanderzusetzen.
    In der Hilfe zu den ganzen TCP... Befehlen findest du übrigens 2 Beispielscripte (1 Server und 1 Client).
    Falls du nicht weiterkommst kannst du hier ja jederzeit fragen ;).

    Ich würde anfangen damit, lokal (dein PC ist gleichzeitig Server [IP:127.0.0.1] und Client) eine Verbindung zwischen 2 AutoIt Scripten aufzubauen. Danach verschickst du Daten in beide Richtungen. Dann machst du dich daran Befehle aus den Daten herauszulesen und sie auszuführen (zum Beispiel eine MsgBox vom anderen Script aus anzeigen lassen).
    Dafür brauchst du dann u.A. folgende Befehle:

    Spoiler anzeigen
    [autoit]

    ;TCP Service starten/stoppen:
    TCPStartup
    TCPShutdown

    [/autoit] [autoit][/autoit] [autoit]

    ;Bei Server auf Verbindung warten:
    TCPListen
    ;und Akzeptieren:
    TCPAccept

    [/autoit] [autoit][/autoit] [autoit]

    ;Vom Client zum Server verbinden:
    TCPConnect

    [/autoit] [autoit][/autoit] [autoit]

    ;Daten senden:
    TCPSend
    ;und empfangen:
    TCPRecv

    [/autoit]
  • Ist im Moment noch auf lokal eingestellt, ergo musst du die IP im Client-Skript anpassen, wenn du es mit mehr als einem PC benutzen willst.

    Und außerdem - wie man am Titel sieht - noch Alpha. Ich übernehme hier keine Garantie, das ist noch lange nicht fertig.^^

    chess

  • Hi,
    du solltest, bevor du Scripte in der Schule installierst, wenigstens halbwegs beschreiben können, wie sie funktionieren.
    Jeder, der nur wenig Ahnung hat, bemerkt nach spätestens der 3. Frage, dass du keine hast....

    Zitat

    Wie ist das mit noip oder dyndns? brauch man das um eine stabile verbindung zu haben?

    Ich denke, die Rechner stehen in einem Raum oder befinden sich in einer Schule?! Wozu brauchts da ein DynDNS?

    Zitat

    Also sind die Programme die auf den "Schüler-PCs" aktiv sind die Server ja? 8|

    Das kann man so machen, muss man aber nicht. Ich würde es jedenfalls nicht so machen^^

    Zitat

    Mir ist wichtig dass der "Master-pc" jederzeit Verbindung herstellen kann und die "Schüler-PCs" steuern kann solange diese aktiv sind...
    Die Schüler-PCs sollen nur lauschen..

    Ok, fangen wir mal ganz von vorne an...
    Stell dir vor, das wären keine Computer, sondern Telefone. Auf jedem Schülertisch liegt eins, und auf dem Lehrertisch liegt eins. Vor der Stunde geht der Hausmeister hin und stellt eine Verbindung her zwischen dem Lehrertelefon und deinem. Wer da wen angerufen hat, ist erstmal völlig irrelevant, die Verbindung steht. Du kommst rein, setzt dich hin und telefonierst mit dem Lehrer.
    Ist jetzt wichtig wer von euch den anderen angerufen hat?
    Jetzt kommt ein andere Schüler in den Raum, greift sich ein Telefon und ruft einen von euch an. Was braucht er dazu?.....Richtig, eine Telefonnummer!(Merken!!!)
    Beim Angerufenen wird jetzt "angeklopft" und der "Empfänger" kann entscheiden, ob er den Anruf annimmt, oder es bleiben lässt.
    Wenn er den Anruf annimmt, dann kann er sich ohne Probleme mit dem anderen Unterhalten und Informationen hin und herschicken, heutzutage per Telefon auch Bilder, SMS usw.
    Mann kann auch die Daten/Unterhaltungen mit mehreren anderen teilen, als Konferenzschaltung oder per Makeln. Wenn einer der Teilnehmer auf die rote Taste drückt, dann wird die Verbindung beendet, völlig egal, wer wen angerufen hat.

    Ersetzen wir nun die Telefone durch Computer.
    Wenn jetzt einer der Teilnehmer den anderen Anrufen will, was braucht er da?..... Richtig, ne Telefonnummer. (Hast du dir das gemerkt?)
    Bei Computern heistt die Telefonnummer nur anders, ist aber genau das gleiche wie eine Telefonnummer!
    Nehmen wir an, du willst den Lehrercomputer "anrufen", dann brauchst du seine Nummer, rufst ihn an, und der Lehrercomputer entscheidet, ob er den Anruf annehmen will oder nicht.
    Umgekehrt ist das natürlich genauso!
    Auf Computerchinesisch übersetzt ist die Rufnummer eine IP-Adresse, der Angerufene ist der Server und der Anrufer ist der Client.
    Sobald die Verbindung hergestellt ist, ist es völlig egal, wer der Server und wer der Client ist, beide können Informationen miteinander austauschen! Allerdings entscheidet NUR der Server, ob er den Anruf bzw. die Verbindung mit dem Client annehmen will oder nicht! Und derjenige, der entscheidet, ist der CHEFFE! :D (Nochmal merken: Server=Cheffe! )

    Mit diesem Hintergrundwissen liest du dir deine Anforderungen nochmal durch:

    Zitat

    Also ich hätte es gerne so dass ich einen "Master" habe der viele "Schul-PCs" steuern soll... Beispielsweise herunterfahren soll...
    Diese Schul PCs sollen halt alle auf Kommandos vom Master lauschen...
    Und am besten wärs wenn alle lauschenden- in einer liste beim "Master" angezeigt werden ;O


    Wenn irgendwer irgendwen "steuern" soll, dann muss PERMANENT eine Verbindung bestehen! Verbindung weg, Steuerung weg! Wenn der "Master" also die "Anrufer" (wie heissen die auf Computerchinesisch? ) in irgendeiner Art und Weise beeinflussen will, müssen erstmal die Verbindungen hergestellt werden. Der Lehrer ist in eurem Fall der "Cheffe", die Schüler fragen bei ihm an, ob sie sich mit ihm verbinden dürfen (auf den Bauch mit euch, ihr Würmer! :P )
    So, nachdem jetzt die Hierachiefrage geklärt ist, und somit klar, wer der Server und der Client ist, brauchst du nur noch die in der Hilfe bei

    [autoit]

    TCPRecv() ;ist der SERVER
    TCPSend() ;ist der CLIENT

    [/autoit]

    enthaltenen Scripte zu starten. Das recv-Script kompilierst du als SERVER.EXE, die du dann startest. Anschliessend kannst du das Send-script starten. Es wird die Verbindung mit dem Server hergestellt. Lokal bei dir auf dem Computer. Willst du die Verbindung im internen Netz oder sogar über das Internet versuchen, empfehle ich dir die Lektüre HIER

    Wenn du diese beiden MINIMALST-Scripte verstanden hast bzw. versucht hast zu verstehen wie sie funktionieren, DANN können wir weitermachen, vorher hat das imho garkeinen Sinn.
    Genauso wenig Sinn macht es, ohne Ahnung irgendwelche Programme von irgendjemand anderem zu installieren, und zu hoffen, dass auf Anhieb alles reibungslos funktioniert. Das tut es nämlich definitiv NICHT! Aber dann macht es einen schlanken Fuss, wenn man wenigstens weiss, wo man den Fehler suchen muss 8)