<?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[UDP Socket, Client IP ermitteln]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche mich aktuell an UDP Sockets.</p>
<p>Dies ist der Code:</p>
<pre><code>void createSocket(){
	int _socket = socket(AF_INET,SOCK_DGRAM,0);

	if(_socket == -1){
		cout &lt;&lt; &quot;Fehler bei der Socket Erstellung&quot;;
		return;
	}

	socklen_t len;
	char mesg[1000];

	sockaddr_in serverAdress;
	serverAdress.sin_family = AF_INET;
	serverAdress.sin_port = htons(5025);
	memset(&amp;serverAdress.sin_zero,0,8);

	if(bind(_socket, reinterpret_cast&lt;sockaddr *&gt;(&amp;serverAdress), sizeof(serverAdress)) == -1){
		cout &lt;&lt; &quot;Fehler beim Binden des Sockets&quot;;
		return;
	}

	recvfrom(_socket,mesg,1000,0,(struct sockaddr *)&amp;serverAdress,&amp;len);
	cout &lt;&lt; (struct sockaddr *)&amp;serverAdress &lt;&lt; endl;

}
</code></pre>
<p>Mit dieser Zeile versuche ich die IP auszugeben:<br />
cout &lt;&lt; (struct sockaddr *)&amp;serverAdress &lt;&lt; endl;</p>
<p>Dies kann natürlich nicht klappen, da dies die Speicheraddresse ausgibt.<br />
Leider steht in meinem C++ Buch nichts drin, wie ich davon den Wert ermittel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Die IP wollte ich nutzen, um dies an eine Funktion zu übergeben. Oder kann ich auch einfach (struct sockaddr *)&amp;serverAdress übergeben?</p>
<p>Hat einer eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331312/udp-socket-client-ip-ermitteln</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 17:38:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331312.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Feb 2015 15:13:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to UDP Socket, Client IP ermitteln on Sat, 21 Feb 2015 15:13:43 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche mich aktuell an UDP Sockets.</p>
<p>Dies ist der Code:</p>
<pre><code>void createSocket(){
	int _socket = socket(AF_INET,SOCK_DGRAM,0);

	if(_socket == -1){
		cout &lt;&lt; &quot;Fehler bei der Socket Erstellung&quot;;
		return;
	}

	socklen_t len;
	char mesg[1000];

	sockaddr_in serverAdress;
	serverAdress.sin_family = AF_INET;
	serverAdress.sin_port = htons(5025);
	memset(&amp;serverAdress.sin_zero,0,8);

	if(bind(_socket, reinterpret_cast&lt;sockaddr *&gt;(&amp;serverAdress), sizeof(serverAdress)) == -1){
		cout &lt;&lt; &quot;Fehler beim Binden des Sockets&quot;;
		return;
	}

	recvfrom(_socket,mesg,1000,0,(struct sockaddr *)&amp;serverAdress,&amp;len);
	cout &lt;&lt; (struct sockaddr *)&amp;serverAdress &lt;&lt; endl;

}
</code></pre>
<p>Mit dieser Zeile versuche ich die IP auszugeben:<br />
cout &lt;&lt; (struct sockaddr *)&amp;serverAdress &lt;&lt; endl;</p>
<p>Dies kann natürlich nicht klappen, da dies die Speicheraddresse ausgibt.<br />
Leider steht in meinem C++ Buch nichts drin, wie ich davon den Wert ermittel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Die IP wollte ich nutzen, um dies an eine Funktion zu übergeben. Oder kann ich auch einfach (struct sockaddr *)&amp;serverAdress übergeben?</p>
<p>Hat einer eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443704</guid><dc:creator><![CDATA[Waishon]]></dc:creator><pubDate>Sat, 21 Feb 2015 15:13:43 GMT</pubDate></item><item><title><![CDATA[Reply to UDP Socket, Client IP ermitteln on Sat, 21 Feb 2015 15:57:18 GMT]]></title><description><![CDATA[<pre><code>// Ungetestet
std::cout &lt;&lt; static_cast&lt;int&gt;(serverAdress.sin_addr.s_b1) &lt;&lt; &quot;.&quot;
          &lt;&lt; static_cast&lt;int&gt;(serverAdress.sin_addr.s_b2) &lt;&lt; &quot;.&quot;
          &lt;&lt; static_cast&lt;int&gt;(serverAdress.sin_addr.s_b3) &lt;&lt; &quot;.&quot; 
          &lt;&lt; static_cast&lt;int&gt;(serverAdress.sin_addr.s_b4);
</code></pre>
<p>Innerhalb von <code>sockaddr_in</code> (<a href="https://msdn.microsoft.com/en-us/library/zx63b042.aspx" rel="nofollow">https://msdn.microsoft.com/en-us/library/zx63b042.aspx</a>) befindet sich <code>sin_addr</code> vom Typ <code>in_addr</code> (<a href="https://msdn.microsoft.com/de-de/library/windows/desktop/ms738571%28v=vs.85%29.aspx" rel="nofollow">https://msdn.microsoft.com/de-de/library/windows/desktop/ms738571%28v=vs.85%29.aspx</a>). Dieser beinhaltet wiederum 4 <code>char</code> s, die den einzelnen mit Punkt getrennten Werten der IP-Adresse entsprechen.</p>
<p>Das gilt vermutlich nur unter Windows, laut der Manpage ip(7) (<a href="http://man7.org/linux/man-pages/man7/ip.7.html" rel="nofollow">http://man7.org/linux/man-pages/man7/ip.7.html</a>, Abschnitt &quot;Adress Format&quot;) enthält in_addr unter Linux nur ein uint32_t. Da müsste man die Bytes mit den Shiftoperatoren herausholen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443714</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Sat, 21 Feb 2015 15:57:18 GMT</pubDate></item><item><title><![CDATA[Reply to UDP Socket, Client IP ermitteln on Sat, 21 Feb 2015 16:20:55 GMT]]></title><description><![CDATA[<p>Kann ich sin_addr, nicht auch irgendwie an eine Funktion übergeben?</p>
<p>Heißt also, dass ich &quot;(struct sockaddr *)&amp;serverAdress&quot; in einer anderen Methode nutzen möchte. Ich weiß allerdings nicht welcher Datentyp es ist und wie ich die Referez an eine andere Funktion übergebe um dort die sendTo Methode auszuführen. Oder muss ich einfach serverAdress übergeben mit dem Typ sockaddr_in?</p>
<p>(kann es gerade nämlich nicht testen :))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443719</guid><dc:creator><![CDATA[Waishon]]></dc:creator><pubDate>Sat, 21 Feb 2015 16:20:55 GMT</pubDate></item><item><title><![CDATA[Reply to UDP Socket, Client IP ermitteln on Sat, 21 Feb 2015 16:59:39 GMT]]></title><description><![CDATA[<p>Ja, du kannst das sockaddr_in an die sendTo-Funktion übergeben.</p>
<p>Noch Tipps zum Code:<br />
Das memset kannst du dir sparen, wenn du</p>
<pre><code>sockaddr_in serverAdress = {};
</code></pre>
<p>schreibst.<br />
Anstatt eines char-Arrays würde ich einen std::vector&lt;char&gt; oder ein std::array&lt;char&gt; verwenden. Dann musst du dir nicht immer die Buffergröße merken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443721</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Sat, 21 Feb 2015 16:59:39 GMT</pubDate></item><item><title><![CDATA[Reply to UDP Socket, Client IP ermitteln on Sat, 21 Feb 2015 17:01:48 GMT]]></title><description><![CDATA[<p><a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms738564" rel="nofollow">https://msdn.microsoft.com/en-us/library/windows/desktop/ms738564</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2443722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2443722</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 21 Feb 2015 17:01:48 GMT</pubDate></item></channel></rss>