![]() |
Konzeptfrage - Internet-Chat als Freeware, wie?
Hallo Leute,
da ich meinen auf der Basis der Indy TCP-Komponenten erstellten Internet-Chat als Freeware veröffentlichen möchte, habe ich da eine Frage zum Konzept: :gruebel: Der Chat beruht auf folgendem Prinzip: Der Server nutzt die IP des PCs, auf dem er läuft und die Clients loggen sich bei dieser IP ein. So weit, so einfach. Nun stellt sich mir aber folgendes Problem: Wie erfahren die Clients die notwendige IP? Meine Idee: Ich richte eine globale Website ein, wo sich jeder Server mit Angabe der IP anmelden kann. So müssen die Clients nur noch auf dieser Seite die entsprechende IP suchen. Wie kann man so etwas am besten machen? Eventuell mit einer Datenbank? Wie sicher ist so was? Hat jemand vielleicht noch eine andere Idee? Bin für jedes Posting dankbar! :coder2: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Vielleicht könnte sich dein Client mit der Webseite verbinden und alle verfügbaren Server abfragen und in einer Combobox auflisten. Wenn man einen Server startet kann man diesen dann auf der Webseite registrieren.
|
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
Wenn man dann auf einen Server willst, sucht man sich einfach in der Liste der erstellten Server den gewünschten aus und verbindet! |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
So, um das Ganze noch mal etwas detaillierter darzustellen:
Der Chat läuft seit einiger Zeit quasi in einer Art Test, zwar übers Internet, aber nur mit einigen ausgesuchten Clients. Der Server wird dabei immer auf meinem PC gestartet und teilt die IP meines Computers mittels FTP einer bestimmten Website mit. Die Clients suchen beim Einloggen automatisch nach einer bestimmten Stelle im HTML-Quelltext dieser Seite, um festzustellen, ob der Server online ist oder nicht. Ist er online, wird die IP aus eben diesem Quelltext ausgelesen und der Client loggt sich ein. Wird der Server abgemeldet, läuft das Ganze genauso. Nun zur praktischen Erweiterung des Chats: Ich habe bei meinem Webspace-Provider einen FTP-Account eingerichtet, der nur den Zugang zu einem ganz bestimmten Verzeichnis zulässt. In diesem Verzeichnis soll dann der gesamte "Verkehr" des Chats verwaltet werden, also die Darstellung der aktiven Server, vielleicht nach dem Muster Angabe der IP, Name eines Chatroomes und einer Kategorie wie z.B Programmierung oder Sport. Könnte man so etwas mit einer PHP-Datei machen? Vielleicht eine einfache Liste per HTML z. B. in einem <DIV>-Container verwalten? :gruebel: Oder mit einer Datenbank? Auf meinem Webspace läuft eine MySQL-Datenbank, da könnte ich ja eine entsprechende Tabelle einrichten. Aber ist das nicht etwas aufwändig? Und wie sieht es da mit der Sicherheit aus, schließlich muss jeder Server ja auch die Zugangsdaten der Datenbank kennen... :coder2: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
Zitat:
Ich würde ein kleines PHP-Script schreiben, das die Daten aus der Datenbank liest und dem Programm als XML zur Verfügung stellt. Dabei kennt nur das PHP-Script die Zugangsdaten zur Datenbank und du musst dich darum nicht mehr kümmern. Im Programm solltest du sehr einfach die XML-Datei auslesen und verarbeiten können. |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
|
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
(Dynamic)DNS?
|
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Dann erstellst du eben zusätzlich ein Script, dass die Server in sauberem HTML auflistet.
|
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
|
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
den trägt man dann als DNS name ein und er ist über DYNDNS immer erreichbar auch wenn die IP sich ändert |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
|
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Und wo ist genau das Problem?
|
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Also, nach einigen Tipps werde es jetzt wohl so machen:
Eine MySQL-Tabelle für die Daten der Server (IP-Nummer, Port und weitere Infos) ist auf meinem Webspace bereits eingerichtet. Eine PHP-Datei mit den Zugangsdaten der Datenbank liegt dort ebenfalls bereit. Die gesamte Kommunikation zwischen den Servern bzw. Clients und dieser Datenbank wird über PHP-Scripte gesteuert. Dabei verwende ich die Komponente IdHttp von Indy, um die auf den lokalen Rechnern zusmmmengestellten Scripte an die Datenbank zu senden. Im einzelnen: Der Server sendet beim Anmelden einen SQL-INSERT-Befehl über IdHttp, damit er in die Datenbank aufgenommen wird. Der Client sendet ein Script mit einem SELECT-Befehl zur Anzeige der aktiven Server, zum Einloggen wird dann die entsprechende IP übernommen. Beim Abmelden sendet der Server einen DELETE-Befehl, um den Datensatz aus der Datenbank zu löschen. Zur Anzeige der aktiven Server plane ich einmal eine PHP-Datei mit HTML-Befehlen zur Darstellung im Browser sowie ein Script mit reinem PHP, um möglichst nur die Daten aus der Datenbank an die Clients zu schicken. Dabei plane ich, die Felder der Datenbank mit Kommas und die einzelnen Datensätze mit z. B. zu trennen, um sie eventuell in eine Stringlist laden zu können. Wäre nett, wenn jemand mal checken könnte, ob ich irgendetwas vergessen habe oder ob es vielleicht einfacher gehen könnte... :gruebel: :coder2: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Warum greifst du nicht direkt aus Delphi auf die MySQL-DB zu?
Klar, manche/viele Anbieter erlauben nicht den externen Zugriff auf ihre MySQL-Server, aber so ist es doch auch doppelt-gemoppelt? |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
Alles hat Vor- und Nachteile. =) Zitat:
Was machst du eigentlich, wenn sich der Server nicht korrekt abmeldet, sondern einfach abstürzt (sei es durch Stromausfall oder Mutwillen)? |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Hhhmmm, ich möchte das ganze so einfach und flexibel wie möglich halten, daher scheint mir der Zugriff mit PHP am besten.
Knackpunkt ist eben noch die Übertragung der Server-Daten an die Clients: Mir wäre am liebsten, möglichst nur die Daten aus der Tabelle zu schicken und im Client z.b. in einer Listbox darzustellen. Eventuell sollte ich da nach jedem Datensatz anstatt lieber die PHP-Anweisung /n benutzen? Beim Absturz eines Servers? Gute Frage, dafür gibt es ja diesen Thread... :gruebel: :zwinker: Vielleicht irgendwie mit einem PHP-Script die Erreichbarkeit des Servers überprüfen? :?: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
hm... ich kann das Gesamtkonzept dieses Chatsystems nicht recht nachvollziehen. Wieso brauch man mehrere Server?
Ein zentraler Server genügt doch und jeder Client meldet sich über ein definiertes Protokoll an. Der Server (DynDNS- oder no-ip-URL) übernimmt die Verwaltung der Kommunikation zwischen den Clients und das wars (siehe IRC). Das wäre doch wesentlich einfacher als so eine komplizierte Geschichte ;) |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
Zitat:
Deshalb ein paar Gedanken: Du solltest auf dem Masterserver, der die Server verwaltet, ein Interface einrichten. Darüber können Clients die aktuellen Server abfragen und die Server ein- bzw. austragen. Der Vorteil ist, dass du das Masterserverprogramm beliebig verändern kannst, solange die Schnittstelle erhalten bleibt. Typisch für OOP eben. Es können aber Probleme auftreten. Du musst die Anfragen deines Chatprogramms eindeutig identifizieren. Was passiert, wenn eine falsche Anfrage ankommt? (z.B. könnte sich ein Script als Server ausgeben und eintragen lassen, obwohl es gar kein Server ist.) Bei der Ausgabe der Serverliste brauchst du dir hingegen keine großen Sorgen machen. Zitat:
Ziemlich kompliziert. Ich lasse mich auch gerne belehren, wenn jemand eine bessere Idee hat. =) |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
Mit CGI kenn ich mich gar nicht aus, schon gar nicht zusammen mit Delphi... :cry: @ Xong: Falls Du genügend Geduld hast, kannst Du mir das ja mal näher erläutern... :chat: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
Zitat:
Zitat:
|
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Für alle, die's interessiert:
Hier der Link zum entsprechenden Thread im Delphi-Forum: ![]() |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab irgendwo einmal das Tutorial gefunden. Vielleicht hilft es.
|
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
siehe erstes Posting... :zwinker: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie? [CGI]
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich erkläre dir das am besten anhand eines kleines Tutorials. Achja, es geht um CGI. Mein Testsystem ist das aktuelle XAMPPLITE-Paket von ![]() Meine gesamten Angaben beziehen sich auf ![]()
Ich habe übrigens auch noch ein Tutorial hier aus der DP gefunden: ![]() Ich hoffe, das hilft dir weiter. =) LG, Xong :hi: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
@ Xong: Puuh, da stellst Du aber ganz schöne Ansprüche an mich... :shock:
Hab's mir erstmal einfach gemacht, Deine HW.exe auf meinen Webspace ins cgi-bin-Verzeichnis geladen und per Browser aufgerufen. Der bietet mir dann diese Datei zum Download an!! :gruebel: :?: Bei dem Tutorial mit der dll stellt sich mir die Frage, wie muss ich die denn ansprechen? Du siehst, Du hast es hier mit einem totalen Anfänger in Sachen CGI zu tun... :zwinker: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Oder du erstellst ein neues Verzeichnis auf deinem Webspace und lädst die .htacces-Datei, die ich angehängt habe in dies Verzeichnis. Dann noch die hw.exe da rein und wenn du Glück hast funktioniert das. Der Webspaceanbieter muss halt bei der ganzen Sache mitspielen. Schließlich sind ausführbare Programme immer auch ein Sicherheitsrisiko. Welchen Anbieter hast du? Oder hast du vielleicht sogar einen eigenen Server? Zitat:
Edit: Jetzt habe ich doch wirklich die Datei vergessen... -.- |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Ok, habe nun die hw.exe und die .htaccess in ein Verzeichnis geladen und versucht auszuführen.
Bekomme folgende Fehlermeldung im Browser: Das Skript konnte nicht fehlerfrei ausgeführt werden. Häufige Ursachen sind, dass das Skript nicht im ASCII-Modus hochgeladen oder der Interpreter (z.B.: #!/usr/bin/perl) nicht angegeben wurde. Mein Anbieter ist übrigens ![]() |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Kann man ein mit Delphi erstelltes Programm, einfach umbenennen und auf jeden belieben Webspace(Linux, Win), welcher natürlich CGI unterstützt, ausführen lassen???
CGI war für mich eigentlich immer nur eine Interpretersprache, wie PHP, nur mit einer anderen Syntax. [EDIT] Soweit ich das jetzt gelesen habe, muss es ein Windowsserver sein. Hier gibt's von Sakura auch ein Tutorial dazu: ![]() |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
Zitat:
Ich vermute mal, dass Host-Europe das Ausführen von Binärdateien unterbindet. Aber das müsstest du ggf. mit dem Support klären. Allerdings denke ich, dass der Aufwand (evtl. auch vom Preis her) einfach zu groß wird. =) Zitat:
Das Problem von hincapie ist aber, dass der Server eine Textdatei vermutet, aber eine ausführbare Binärdatei bekommt. Zitat:
Oder um das Apache-HowTo zu zitieren: Zitat:
LG, Xong |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Also, ich habe das mit CGI am Wochenende mal etwas getestet.
Offensichtlich lässt mich mein Hoster nicht so ohne weiteres Binärdateien auf dem Server ausführen. Daher scheidet diese Variante für mich leider aus... :cry: Dafür läuft die PHP-Variante schon ziemlich gut... :thumb: Was mich noch interessieren würde: Gibt es eine Möglichkeit, mit php eine Funktion auf dem Server einzubauen, mit der man z.b. regelmäßig überprüfen kann, ob ein bestimmter Zeitraum abgelaufen ist, ohne diese Funktion immer wieder manuell neu zu starten? :gruebel: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
Zitat:
Dafür ist es wichtig, eine eigene Datei zu haben, die die gewünschten Funktionen ausführt. Hosteurope bietet so etwas auch an: ![]() Solltest du ein Webpaket haben, wo das nicht unterstützt wird, dann kannst du ![]() |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
![]() So, nun möchte ich mit php alle Server aus der Datenbank löschen, die mehr als einen Tag eingetragen sind:
Code:
Kann das so funktionieren? :gruebel:
<?php
include("../cgi-bin/einlog.php"); include("funk.php"); $timestamp = time(); $connect=@mysql_connect($dbHost, $dbUser, $dbPass) or die("F"); $sql= sprintf("DELETE FROM Chat WHERE Login='%s'", mysql_real_escape_string($timestamp -1)); If ($res=send_sql($db,$sql)) {echo "OK";} ?> |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
[quote="hincapie"]
Zitat:
Zitat:
Du musst schon überprüfen, welcher Server älter als einen Tag ist.
Code:
Übrigens: Die Funktion timestamp() gibt dir immer einen Wert in Sekunden zurück.
<?php
include('../cgi-bin/einlog.php'); include('funk.php'); $connect=@mysql_connect($dbHost, $dbUser, $dbPass) or die('F'); If ($res=send_sql($db,'DELETE FROM Chat WHERE to_days(Login) < to_days(NOW())')) {echo 'OK';} ?> LG, Xong |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
Zitat:
Sollte ich noch Fragen habn, werde ich sie hier stellen... :mrgreen: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Zitat:
Mit dem Cronjob fragst du schließlich alle 10-15 Minuten ab, welche Einträge älter als eben diese 10-15 Minuten sind und löschst sie aus der Liste der aktiven Server. Zusätzlich kann sich ein Server natürlich auch regulär abmelden. Zitat:
|
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
@ Xong:
Hhhmm, Deine Vorschläge scheinen mir ziemlich schlüssig zu sein... :gruebel: :-D Im Moment habe ich in der Datenbank ein Login-Feld im Date-Format, demnach müsste ich das in ein DateTime umwandeln oder ein zusätzliches Time-Feld einfügen... Was ist wohl besser? :gruebel: Werde mir auch nochmal die Syntax für das UPDATE-Statement in MySQL zu Gemüte führen... :coder2: |
Re: Konzeptfrage - Internet-Chat als Freeware, wie?
Ok, ich konnte mich erst jetzt wieder mit dem Thema näher befassen...
Ich habe jetzt noch ein Feld 'LogTime' vom Typ TIME eingefügt, in diesem wird von den Servern die jeweilige Login-Zeit eingetragen. Demnach müsste ein Script zum Löschen aller Server, die länger als 10 Minuten eingeloggt sind, wohl so aussehen? :gruebel:
Code:
Könnte man da nicht auch etwas mit TIMEDIFF machen?
<?php
include('../cgi-bin/einlog.php'); include('funk.php'); $connect=@mysql_connect($dbHost, $dbUser, $dbPass) or die('F'); If ($res=send_sql($db,'DELETE FROM Chat WHERE time_to_sec(LogTime) < time_to_sec(TIME()-600)')) {echo 'OK';} ?> Evtl. so:
Code:
...
If ($res=send_sql($db,'DELETE FROM Chat WHERE TIMEDIFF(LogTime, TIME()) < '00:10:00'')) {echo 'OK';} ?> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz