Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi,

ich habe eigentlich nur eine Grundsätzliche Frage zur Netzwerkprogrammierung. Ich habe mir entsprechende Tutorials aus dem Netz gesucht und das ganze mal nach programmiert. Es war auch nicht schwer zu verstehen. Dabei bin ich dann auf folgendes Problem gestoßen oder besser gesagt Frage.

Ein Client zu programmieren scheint nicht sonderlich schwer zu sein. Aber wie sieht es mit einem Server aus????

Ich möchte nur einen kleinen Server haben, der wenn er eine Nachricht bekommt eine Meldung ausgibt. Wie funktioniert der Server denn grundlegend?

Der Server bleibt die ganze Zeit in der Schleife und wartet bis er eine Nachricht bekommt? Ich habe gelesen, dass da irgend etwas von Messages gesagt wurde. Der Server bekommt eine Message und reagiert. Im Prinzip so wie bei einem Fenster. Nur wie????

Beim Client initialisiere ich zu erst den Socket "WSAStartup", dann bilde ich ein Socket, lege die Adresse des Empfängers, das Protokoll und sonstige Dinge fest. Dann kann ich per connect auf den Server connecten.

Doch wie läuft das bei dem Server? Socket initialisieren klingt ja noch sinnvoll. Doch spätestens bei dem connect sollte das ja anders laufen.

Gruß

BabyMitSchnully

Geschrieben

Hallo,

einen Server zu programmieren ist nur vermeindlich schwieriger. Der muss nämlich nicht aktiv "connecten", sondern einfach nur faul "lauschen" (listen) :).

Schau dir dazu mal den folgenden Link an:

http://www.c-worker.ch/

Da ist das alles schön erklärt, Unterschiede, Vorgehensweisen etc.

Geschrieben

Juhu,

danke schön. Es hat geklappt. Ich kann jetzt consolen Server und Client programmieren. Ist gar nicht so schwer eigentlich sogar sehr leicht zu programmieren. Macht so gar tiersich Spaß.

Außerdem habe ich heute noch eine ganze Menge Dialoge programmiert. Ich bin einfach zu kompliziert an die ganze Sach ran gegangen, dass ist eigentlich ganz einfach.

Geschrieben

Hallo,

Original geschrieben von carstenj

einen Server zu programmieren ist nur vermeindlich schwieriger. Der muss nämlich nicht aktiv "connecten", sondern einfach nur faul "lauschen" (listen) :).

Ein bisschen mehr macht der Server schon, zumal die Funktionsweise auch vom eingesetzten Protokoll abhängig ist. Mit listen() wird nur die Länge der Warteschlange für einen Socket auf Server-Seite angegeben. Um Daten empfangen/senden zu können, musst Du mit accept() und read()/write() die Daten weiter verarbeiten. Bei mehreren offenen Sockets sollte mit einem select-loop gearbeitet werden bzw. der Server forken().

Nic

Geschrieben

Hi,

wenn du schon solche Begriffe in den Taum wirfst, dann erkläre sie auch bitte :D

Ist wohl eine Krankheit eines Programmierers, dass er immer alles wissen muss. Womit mache ich was????

Was ist denn forken() oder was machen die ganzen anderen Funktionen, die du da hingeschrieben hast?????

Geschrieben

Hallo,

forken bedeutet, einen neuen Prozess zu erzeugen. Der eigentliche Elternprozess wird quasi kopiert, und für jede eingehene Verbindung wird ein neuer Child Prozess "geforkt". Diese arbeiten dann mehr oder weniger unabhängig voneinander.

Das betrifft aber ausschließlich Linux und Konsorten.

Selct wird hier erklärt:

http://www.c-worker.ch/tuts/select.html

accept hier:

http://www.ecst.csuchico.edu/%7Ebeej/guide/net/html/syscalls.html#accept

Geschrieben

Hallo,

Original geschrieben von BabyMitSchnully

Hi,

wenn du schon solche Begriffe in den Taum wirfst, dann erkläre sie auch bitte :D

Ist wohl eine Krankheit eines Programmierers, dass er immer alles wissen muss.

Nein, das nicht (sollte man auch nicht voraussetzen). Allerdings lassen sich mit den oben genannten Links und den Stichworten über google (oder eine andere Suchmaschine) genügend Tutorials und Links mit ausführlichen Erklärungen finden.

Sehr umfangreich ist die Socket-FAQ:

http://www.developerweb.net/sock-faq/

Ein übersichtliches Beispiel zur Client/Server Programmierung gibts unter anderem hier:

http://pandonia.canberra.edu.au/ClientServer/socket/socket.html

Mit fork() werden Kindprozesse erzeugt, die beispielsweise die Abarbeitung von Requests mehrere Clients übernehmen können. Select() wird verwendet, um mehrere offenen Sockets auf eingehende Daten zu überprüfend; das kann blockierend oder non-Blocking geschehen. Im Non-Blocking Fall kehrt der Aufruf von select() auch dann zurück, wenn auf den Sockets keine Daten anliegen.

Nic

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...