Indy Server-Socket - Hilfe
-
Hallo,
ich bitte euch um euren Tip,
habe folgendes vor:Möchte einen Server erstellen -
Server:
-lauft ständig und sendet Text an n-Clients.
(Wie sendet man über einen Button einen Text?)
(Wie viel Clients könnten sich theoretisch auf einen Server hosten?)Server soll folgende Informationen vom Client angeben:
- Ip-Adresse vom Client (sowas wie eine User Liste).
(Kann das die Indy-Komp?)eventuelle Client Authentifizierung?
Client
- soll nur Connecten und Text empfangen können.
-----------------------------------------------
Dachte an die Indy Komponenten, habt ihr eventuelle Tutorials? Oder Tips zu den og vorhaben?
Habe als Einstieg die Seite gefunden:
http://rrworld.mybb3.org/spezielles-client-server-anwendungen-tcp-ip--t150.html
-
Im Beispiel-Verzeichnis des BCB unter Indy/BasicClientServer/ befindet sich ein Minimalbeispiel, dass die grundlegenden Funktionen aufzeigt.
Die maximale Anzahl von Clients sollte vermutlich nur von der Leistung des Server-Rechners abhängen.
Du könntest Dir auch noch TClient - und TServerSocket in der Hilfe anlesen.
-
Vielen Dank für die Antwort.
Bist du so nett und ladest dieses oben genannante Beispiel auf einen Hoster?
Oder den Quellcode hier posten?
Weil ich finde dieses Beispiel leider nicht.:(
-
Schau mal auf indyproject.com
Hier ist die Dokumentation (Ist zwar für V10, die auf dem Builder nicht läuft, aber trotzdem sehr hilfreich)
Hier die besagten Demos//Edit
Hier noch die IndyVersionen zum Download (wie bereits geschrieben, für den BCB nicht die neuste 10er Versionen nutzen!)
-
Leider sind die Beispiele in Delphi und nebenbei schon recht kompliziert.
In Delphi das zu finden was man sucht ist nicht ganz so einfach wenn man es
nicht kann. Geschweige denn es zu übersetzen.Gibt nicht ein kurzes C++ Beispiel irgendwo, für FTP Server|Clients ?
-
Tim06TR schrieb:
Leider sind die Beispiele in Delphi und nebenbei schon recht kompliziert.
In Delphi das zu finden was man sucht ist nicht ganz so einfach wenn man es
nicht kann. Geschweige denn es zu übersetzen.Gibt nicht ein kurzes C++ Beispiel irgendwo, für FTP Server|Clients ?
Schließe mich ihm an
-
Hallo,
Beispiel anhand von TClient-/TServerSocket und davon ausgehend das auf dem Server ein TServerSocket gesetzt und aktiv ist, und auf dem Client ein TClientSocket gesetzt und aktiv ist.
//Verbinden: ClientSocket->Host = Server; ClientSocket->Active = true;
Es muss nichts weiter angestellt werden. Der Server akzeptiert die Verbindung selbständig (vorausgesetzt TServerSocket ist aktiv und der Server läuft auch)
//Senden eines Textes vom Server ServerSocket->Socket->Connections[0]->SendText("Hallo"); //Connections[0] steht hier für die erste verfügbare Verbindung
Ansich ist es das auch schon gewesen. Das einzige was nun noch passieren könnte, wäre dass der CLient etwas mit dem Text anfangen möchte.
void __fastcall TForm::ClientSocketRead(TObject *Sender, TCustomWinSocket *Socket) { ShowMessage(Socket->ReceiveText()); }
Beim Beenden natürlich nicht vergessen die Verbindung zu schließen...
ClientSocket->Close();
LG, Micha
-
Wie lasse ich abfragen ob ein Port besetzt ist ?
-
indem du prüfst, ob die Verbindung nicht zu Stande gekommen ist.
-
IdR. wirst du eine Exception bekommen, die du abfangen kannst.
-
wenn die Verbindung fehlschlägt, bekomme ich immer eine hässliche Fehlermeldung.
Kann ich die Umgehen und einfach das in zb, das in eine Textbox schreiben ?
-
Wenn Du das in try/catch schachtelst und den Fehler korrekt abfängst, sollte keine Fehlermeldung des Systems kommen. In den Block kannst Du dann auch Deine eigene Fehlermeldung anbringen.
Imho wird aber, wenn das Programm via BCB gestartet wurde, immer eine Fehlermeldung geworfen. Also das ganze zum Testen direkt aufrufen.
-
jaaaa...
ich fragte ja, somit war doch zu erwarten, dass ich das noch nie gemacht habe ?
Was muss ich denn wo abfangen
Fehler Meldung bzw, Fehler Code kenn ich ja.Application->ShowException(&exception);
Da gibt er mir in der Anwendung die Fehlermeldung hab ich recht ?
dann müsste ich doch nur die Exeption mit nem if Überprüfen und dann was anderes damit tun ?
-
Anhand von mehr als 600 Posts von Dir und in Anbetracht, dass Socket-Programmierung nicht zum Grundlagenwissen gehört, habe ich eigentlich schon angenommen, dass Du wüsstest, wie man mit try/catch umgeht.
Schau doch mal in die Borlandhilfe oder nutze mal Google um zu Verstehen, wie die Sache funktioniert.
-
Ich seh mal. Hab ich noch nie benutzt
-
AAHHH Ich glaub ich verstehen !
btw: Sowas hab ich schon immer mal gesucht xDEDIT: HAHA ! Ist ja genial, das ich nicht vorher darauf gestoßen bin !
nur um zu zeigen das ich das Prinzip geschnallt hab
try { Client->Connect(); } catch (...) { ShowMessage("Schwerwiegender Fehler erkannt"); }
-
genau so läuft das.
Wie gesagt im Builder gestartet kommt der Fehler immer noch, aber extern gestartet, müsste Deine eigene Meldung kommen.