Zum Inhalt springen

TSockerServer mit ftThreadBlocking


aLeXanDer..

Empfohlene Beiträge

Hallo Community,

Borland C++ 2007

Ich hab folgendes Problem.

Ich habe ein einfaches Beispielprogramm, wo ich so ne art Chatprogramm habe.

Hab die Komponenten TSocketServer und TSocketClient integriert.

Man kan die Anwendung 2mal Starten eines davon läuft als Server

die andere dann als Client und schaltet sich auf den Server auf.

Sind beide auf der Eigenschaft

ftNonBlocked funktioniert die Kommunikation einwandfrei.

Stell ich nun aba beider auf ftBlocked, beim TSocketClient

und auf ftThreadBlocked , beim TSocketServer,

funktioniert die Kommunikation nicht. Der Client sagt zwar das er sich an den Server drangehängt hat, der Server bekommt jedoch nichts davon mit.

er läuft nicht in die Routine , OnClientConnect.

Schick ich nun Dateien vom Client zum Server, stürzt dieser ab.

Hab ich irgend eine Kleinigkeit übersehn?! oder gibt es was bestimmtes zu beachten das beide als Blocked laufen!?

Zum Test hab ich Texte verschickt.

vom Server zum Client mit

ServerSocker->Socket-Connection(0)->SendText
und vom Client zum Server mit
ClientSocket->Socket->SendText

Hab keine Idee mehr an was es liegen könnte.

Danke

alex

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm, so einfach ist das aber nun nicht umzuschalten zwischen synchroner (blocked) und asynchronen (non-blocking) Implementierung.

Grob gesagt wird bei asynchroner Socket-Programmierung eine Funktion wie connect() aufgerufen und dieser Aufruf kehrt nach dem eigentlichen Handling sofort an den aufrufenden Kontext zurück. Deshalb wird bei asynchronen Sockets immer in Ereignissen reagiert, wie OnError(), OnRead() und wie sie alle heißen mögen.

Bei synchronen Sockets ist das anders, da wartet der Aufruf von connect() bis alles erledigt ist, also bis Std-Timeout oder bis Server geantwortet hat.

Wenn dann aber nach connect() kein Code mehr folgt, wird logischerweise der Code im OnConnected() nicht ausgeführt, also gehts nicht weiter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm, das ist nicht so einfach zu beantworten, was man wann machen muss.

Das hängt in allererster Linie davon ab ob blocking oder non-blocking.

Danach kommt es darauf an, ob Du den Client und/oder Server machen willst.

Im Prinzip läuft es aber immer auf dasselbe raus:

Server S bindet sich an IP:Port, meist 0.0.0.0:Port

S wartet (listen) auf Connects der Clients, hier bereits Unterschied zwischen blocking und non-blocking.

Blocking wartet in einem Thread. Non-Blocking returnt intern immer und liefert einfach kein Eregnis

Client C connectet sich an IP:Port (aber nicht 0.0.0.0, sondern eine echte :D ).

blocking C wartet auf Timeout oder Erfolg.

non-blocking C returnt nach Verbindungsversuch sofort und läuft einfach weiter. D.h. asynchroner C registriert eine Callback OnConnected() oder so und dort wird gehandelt, dass Connect ok ist.

Leider kann ich Dir ohne konkrete Aufgabenstellung, was Du am non-blocking Beispielprogramm verändern willst, nicht genauer helfen.

Unter "Accept" versteht man genau das Handling, wenn der Server dem Client den vom Client initiierten Verbindungsversuch statt gibt. D.h. zum Zeitpunkt, wenn der Server noch kein Accept gemacht hat, kann der Server auch die halb-offene Verbindung schliessen und der Client geht leer aus (Stichwort: Accept-Floodings).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...