Zum Inhalt springen

Netzwerkprogrammierung


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

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