BabyMitSchnully Geschrieben 7. April 2004 Geschrieben 7. April 2004 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 Zitieren
carstenj Geschrieben 7. April 2004 Geschrieben 7. April 2004 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. Zitieren
BabyMitSchnully Geschrieben 7. April 2004 Autor Geschrieben 7. April 2004 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. Zitieren
nic_power Geschrieben 7. April 2004 Geschrieben 7. April 2004 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 Zitieren
BabyMitSchnully Geschrieben 8. April 2004 Autor Geschrieben 8. April 2004 Hi, wenn du schon solche Begriffe in den Taum wirfst, dann erkläre sie auch bitte 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????? Zitieren
carstenj Geschrieben 8. April 2004 Geschrieben 8. April 2004 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 Zitieren
nic_power Geschrieben 8. April 2004 Geschrieben 8. April 2004 Hallo, Original geschrieben von BabyMitSchnully Hi, wenn du schon solche Begriffe in den Taum wirfst, dann erkläre sie auch bitte 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 Zitieren
Empfohlene Beiträge
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.