<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Sockets]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mein Chat-projekt in letzter Zeit etwas vernachlässigt, was ich nun aber wieder aufholen möchte.<br />
Dazu habe ich ein paar Fragen zum Verständnis von Sockets:</p>
<p>Ich beziehe alle meine Fragen hier auf das Client-Server-Prinzip.</p>
<p>Im Endeffekt ist doch ein Server auch nichts anderes als ein Client. Nur die Aufgaben des Servers sind anders, und man kennt die Adresse des Servers. Aber eigentlich könnte man auch einfach Client-Client-Prinzip oder Rechner-Rechner-Prinzip sagen, oder?<br />
Wenn ich einen Socket erstelle, egal ob im Serverprogramm oder im Clientprogramm, so muss ich mir diesen wie eine Röhre vorstellen, welche noch einfach so in der Luft schwebt, solange ich sie nicht auf etwas verweise, oder??<br />
Danach habe ich 2 Möglichkeiten:</p>
<p>1. Ich binde diese Röhre an meinen Rechner (Serverprinzip) und lasse sie dann lauschen (mit listen) ob eine andere Röhre andockt</p>
<p>2. Ich docke mit meiner Röhre direkt an ein Zielrechner an und verbinde meinen Rechner somit mit seinem</p>
<p>Daraus lässt sich doch schließen, dass ein Socket bei der Erstellung auf jeden Fall Informationen über den eigenen Rechner enthält, oder? (also Adresse und Port)</p>
<p>Beim Clientprogramm macht das alles Sinn. Der Socket wird erstellt und dann mit dem Server verbunden.</p>
<p>Beim Serverprogramm jedoch läuft das etwas anders ab, aber ich kann mir das nicht so ganz bildhaft vorstellen, was in den einzelnen Schritten passiert:</p>
<p>-Was genau erreiche ich mit der Funktion &quot;bind&quot; ?? Kann ich denn einen Socket auch an einen anderen Rechner binden?? Das wäre doch etwas unlogisch, oder? Aber wieso brauche ich dann überhaupt die bind-funktion? Ich dachte, dass bereits bei der Erstellung des Sockets der Socket zumindest mit meinem Rechner verbunden ist...</p>
<p>-Mit der &quot;listen&quot;Funktion kann der Socket nun wohl darauf warten, von anderen Sockets &quot;angepeept&quot; zu werden, und von diesen dann die Herkunft auslesen</p>
<p>-Die accept-Funktion kommt dann wohl der &quot;connect&quot;-Funktion des Clientprogramms gleich...der Server stellt eine Verbindung mit dem Client her (oder??).</p>
<p>Das ist mir alles etwas unklar. Zwei Rechner können sich doch nur miteinander verständigen, wenn jeder der beiden Rechner Adresse und Port des eigenen bzw. des anderen Rechners kennt, oder?<br />
Also muss ja die Klasse SOCKET eine Abteilung enthalten, in der diese Informationen gespeichert werden, denn der Server bekommt ja nur Infos vom Socket des Clienten - das ist die einzige Quelle, und von dieser muss der Server dann eine Verbindung zum Clienten aufbauen.</p>
<p>Nun sieht die accept-Funktion aber so aus:</p>
<p>SOCKET sock = accept(sock_main, (SOCKADDR*)&amp;server_addr, NULL)</p>
<p>(sock_main ist hier der Socket des Serverprogramms, &amp;server_addr ist die SOCKADDR_IN - Klasse des Servers)</p>
<p>Ganz genau kann ich hier aber nicht herauslesen, wie diese Funktion der connect-Funktion des Clientprogramms gleicht:</p>
<p>rc = connect(sock_main, (SOCKADDR*)&amp;server_addr, sizeof(SOCKADDR))</p>
<p>??</p>
<p>Und bei der Erstellung des Sockets kann ich auch nicht erkennen, wo genau die Adresse/Port des eigenen Rechners in den Socket gespeichert werden:</p>
<p>sock_main = socket(AF_INET, SOCK_STREAM, NULL)</p>
<p>Ich hoffe jemand hat mein Problem verstanden!!</p>
<p>Viele Grüße und hoffentlich bis bald!<br />
Gapa</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/225842/sockets</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 08:34:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/225842.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 25 Oct 2008 15:58:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sockets on Sat, 25 Oct 2008 15:58:39 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mein Chat-projekt in letzter Zeit etwas vernachlässigt, was ich nun aber wieder aufholen möchte.<br />
Dazu habe ich ein paar Fragen zum Verständnis von Sockets:</p>
<p>Ich beziehe alle meine Fragen hier auf das Client-Server-Prinzip.</p>
<p>Im Endeffekt ist doch ein Server auch nichts anderes als ein Client. Nur die Aufgaben des Servers sind anders, und man kennt die Adresse des Servers. Aber eigentlich könnte man auch einfach Client-Client-Prinzip oder Rechner-Rechner-Prinzip sagen, oder?<br />
Wenn ich einen Socket erstelle, egal ob im Serverprogramm oder im Clientprogramm, so muss ich mir diesen wie eine Röhre vorstellen, welche noch einfach so in der Luft schwebt, solange ich sie nicht auf etwas verweise, oder??<br />
Danach habe ich 2 Möglichkeiten:</p>
<p>1. Ich binde diese Röhre an meinen Rechner (Serverprinzip) und lasse sie dann lauschen (mit listen) ob eine andere Röhre andockt</p>
<p>2. Ich docke mit meiner Röhre direkt an ein Zielrechner an und verbinde meinen Rechner somit mit seinem</p>
<p>Daraus lässt sich doch schließen, dass ein Socket bei der Erstellung auf jeden Fall Informationen über den eigenen Rechner enthält, oder? (also Adresse und Port)</p>
<p>Beim Clientprogramm macht das alles Sinn. Der Socket wird erstellt und dann mit dem Server verbunden.</p>
<p>Beim Serverprogramm jedoch läuft das etwas anders ab, aber ich kann mir das nicht so ganz bildhaft vorstellen, was in den einzelnen Schritten passiert:</p>
<p>-Was genau erreiche ich mit der Funktion &quot;bind&quot; ?? Kann ich denn einen Socket auch an einen anderen Rechner binden?? Das wäre doch etwas unlogisch, oder? Aber wieso brauche ich dann überhaupt die bind-funktion? Ich dachte, dass bereits bei der Erstellung des Sockets der Socket zumindest mit meinem Rechner verbunden ist...</p>
<p>-Mit der &quot;listen&quot;Funktion kann der Socket nun wohl darauf warten, von anderen Sockets &quot;angepeept&quot; zu werden, und von diesen dann die Herkunft auslesen</p>
<p>-Die accept-Funktion kommt dann wohl der &quot;connect&quot;-Funktion des Clientprogramms gleich...der Server stellt eine Verbindung mit dem Client her (oder??).</p>
<p>Das ist mir alles etwas unklar. Zwei Rechner können sich doch nur miteinander verständigen, wenn jeder der beiden Rechner Adresse und Port des eigenen bzw. des anderen Rechners kennt, oder?<br />
Also muss ja die Klasse SOCKET eine Abteilung enthalten, in der diese Informationen gespeichert werden, denn der Server bekommt ja nur Infos vom Socket des Clienten - das ist die einzige Quelle, und von dieser muss der Server dann eine Verbindung zum Clienten aufbauen.</p>
<p>Nun sieht die accept-Funktion aber so aus:</p>
<p>SOCKET sock = accept(sock_main, (SOCKADDR*)&amp;server_addr, NULL)</p>
<p>(sock_main ist hier der Socket des Serverprogramms, &amp;server_addr ist die SOCKADDR_IN - Klasse des Servers)</p>
<p>Ganz genau kann ich hier aber nicht herauslesen, wie diese Funktion der connect-Funktion des Clientprogramms gleicht:</p>
<p>rc = connect(sock_main, (SOCKADDR*)&amp;server_addr, sizeof(SOCKADDR))</p>
<p>??</p>
<p>Und bei der Erstellung des Sockets kann ich auch nicht erkennen, wo genau die Adresse/Port des eigenen Rechners in den Socket gespeichert werden:</p>
<p>sock_main = socket(AF_INET, SOCK_STREAM, NULL)</p>
<p>Ich hoffe jemand hat mein Problem verstanden!!</p>
<p>Viele Grüße und hoffentlich bis bald!<br />
Gapa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604734</guid><dc:creator><![CDATA[Gapa]]></dc:creator><pubDate>Sat, 25 Oct 2008 15:58:39 GMT</pubDate></item><item><title><![CDATA[Reply to Sockets on Sun, 26 Oct 2008 12:13:09 GMT]]></title><description><![CDATA[<p>Hallo nochmal,</p>
<p>sorry für den Doppelpost, aber ich glaube dass dieser Thread hier sonst verloren geht wenn ich einfach nur editiere...<br />
Ich denke, dass meine Fragestellung etwas unklar war, deshalb versuche ich es erneut:</p>
<p>Zwei Rechner können doch nur miteinander kommunizieren, wenn jeder der beiden Rechner seine Adresse (IP / Port) sowie die Adresse des Zielrechners kennt.</p>
<p>Der Client kennt die Adresse des Zielrechners. Diese wird ja in der SOCKADDR_IN - Klasse gespeichert. Aber woher bekommmt der Server (Zielrechner) die Adresse des Clienten, sodass er auf seine Anfragen auch antworten kann? Diese Infos muss er doch irgendwie aus der accept-Funktion herausbekommen, oder?</p>
<p>Könnte mir jemand auf diese Frage eine Antwort geben? Ich glaube dann verstehe ich das Prinzip der Sockets auch etwas besser.</p>
<p>Viele Grüße<br />
Gapa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605047</guid><dc:creator><![CDATA[Gapa]]></dc:creator><pubDate>Sun, 26 Oct 2008 12:13:09 GMT</pubDate></item><item><title><![CDATA[Reply to Sockets on Sun, 26 Oct 2008 12:41:03 GMT]]></title><description><![CDATA[<blockquote>
<p>woher bekommmt der Server (Zielrechner) die Adresse des Clienten</p>
</blockquote>
<p>Im Client-Server-Modell kontaktiert zuerst der Client den Server, sodass der Server bereits Pakete vom Client erhalten hat, bevor er selbst schicken muss. Im Paketheader steht die IP des Clients.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605058</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Sun, 26 Oct 2008 12:41:03 GMT</pubDate></item></channel></rss>