Hallo alle zusammen,
stellt euch folgendes Szenario vor:
Es gibt eine Gruppe von Freunden in verschiedenen Wohnungen, von denen jeder über einen eigenen Internet-Provider ab und zu im Netz surft. Es existiert eine Art „Haupt-User“, der direkt über ein DSL-Modem mit dem Internet verbunden ist, während ein Teil der anderen User in einem LAN sitzen und deren Computer jeweils hinter einem anderen Computer „versteckt“ ist und nur über diesen mit dem Internet verbunden ist.
Jetzt will der Haupt-User ein Programm an seine Freunde verteilen, das zunächst einmal nur die Aufgabe hat, dem Computer des Haupt-Users zu sagen „Ich bin auch online!“, sobald der Freund online ist. Alle, auch der Haupt-User haben eine dynamische externe IP.
Die Lösung scheint einfach: Der Haupt-User legt ein Ohr an einen seiner Ports und schreibt seine aktuelle IP + Portnr. in eine Datei über ein PHP-Skript auf einen beliebigen z.B. angemieteten Webspace. Wenn einer seiner Freunde online geht, ruft dessen Programm die Daten auf dem Webspace ab und ruft den Haupt-User an.
Das Problem: Wenn der Freund vor dem Haupt-User online ist, findet er entweder keine oder eine veraltete IP auf dem vereinbarten Webspace. Jetzt könnte man sein Programm natürlich so schreiben, dass es alle 5 sek. den Webspace abtastet bis es eine aktuelle IP findet, aber das wäre ja wie mit Kanonen auf Spatzen zu schießen.
Der Freund müsste auch seine IP + Portnr. auf den Webspace schreiben können, damit falls der Haupt-User später online geht, er den Freund direkt anfunken und checken kann, ob er online ist. Das wäre auch kein Problem, wenn alle direkt verbunden wären - doch einige sitzen in LANs hinter dem direkt verbundenen PC und würden nicht ihre dynamische externe, sondern ihre interne IP (192.168.0.x) reinschreiben. Okay, die dynamische IP kann man per PHP ($REMOTE_ADDR) auch herausbekommen - aber mit dieser alleine kommt auch noch nicht an den einzelnen indirekt verbundenen PC heran.
Was nun?
Viele Grüße,
Mohamed.
Moien
Jetzt will der Haupt-User ein Programm an seine Freunde
verteilen, das zunächst einmal nur die Aufgabe hat, dem
Computer des Haupt-Users zu sagen „Ich bin auch online!“,
sobald der Freund online ist. Alle, auch der Haupt-User haben
eine dynamische externe IP.
Die Lösung scheint einfach: Der Haupt-User legt ein Ohr an
einen seiner Ports und schreibt seine aktuelle IP + Portnr. in
eine Datei über ein PHP-Skript auf einen beliebigen z.B.
angemieteten Webspace.
Das geht viel einfacherer: Mach Accounts bei DynDNS und erzeuge so eine Möglichkeit die aktuellen IPs rauszufinden. Wenn die IPs auf Ping reagieren stehen die Chancen nicht schlecht. Ein zusätzlicher Check per icq-Status oder offenem Port … fertig.
cu
Jetzt will der Haupt-User ein Programm an seine Freunde
verteilen, das zunächst einmal nur die Aufgabe hat, dem
Computer des Haupt-Users zu sagen „Ich bin auch online!“,
sobald der Freund online ist.
Warum nicht einfach einen Instant Messenger? Genau dafür sind die doch da.
Gruß,
Malte
Ähm…
Hallo Malte,
Du hast mir eine Frage gestellt, die ich befürchtet habe:
Warum nicht einfach einen Instant Messenger? Genau dafür sind
die doch da.
Einfach gesagt: Ich muss es selbst programmieren…
Schöne Grüße,
Mohamed.
Hi,
Warum nicht einfach einen Instant Messenger? Genau dafür sind
die doch da.
Einfach gesagt: Ich muss es selbst programmieren…
ah, eine Hausaufgabe o.ä.? Nun denn, damit hast Du ja aber schonmal einen Ansatz, wie Du da herangehen kannst. Man könnte sich also einen kleinen daemon schreiben, der den Status „online“ überträgt. Irgendeine Art von zentralem Server muss es dabei geben, sei es nun, dass man dyndns dafür nutzt oder Webspace mit einer Programmiersprache. Das lokale Tool muss dabei nichts weiter tun, als an diese definierte Stelle sekündlich (oder so) den Status zu übermitteln, der Server setzt den Status hingegen auf „offline“, wenn die Meldung ausbleibt. Keine große Sache eigentlich, egal womit man das realisiert.
Gruß,
Malte
Mal schauen
Man könnte
sich also einen kleinen daemon schreiben, der den Status
„online“ überträgt. Irgendeine Art von zentralem Server muss
es dabei geben, sei es nun, dass man dyndns dafür nutzt oder
Webspace mit einer Programmiersprache. Das lokale Tool muss
dabei nichts weiter tun, als an diese definierte Stelle
sekündlich (oder so) den Status zu übermitteln, der Server
setzt den Status hingegen auf „offline“, wenn die Meldung
ausbleibt. Keine große Sache eigentlich, egal womit man das
realisiert.
Hallo Malte,
wie gesagt, das sekündliche Lesen/Schreiben auf den Webspace sollte vermieden werden (es müsste ständig per HTTP geladen werden, das ist eine der Kanonen auf die Spatzen).
Ich habe gerade entdeckt, dass PHP Socket-Funktionen mitliefert, und die scheinen auf meinem Webspace zu funktionieren. Ich habe jetzt vor, den Webspace als „Tunnel“ zu benutzen: Wenn der Haupt-User etwas später eintrifft, sind die anderen längst mit dem Webserver verbunden. Nachrichten des Haupt-Users an die Freunde leitet der Webserver dann gerne weiter und umgekehrt, wenn es klappen sollte.
Danke für die bisherigen Beiträge!
Schöne Grüße,
Mohamed.