<?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[Zugriffsverletzung bei simpler übergabe &amp;quot;h_addr_list&amp;quot;]]></title><description><![CDATA[<p>Hi</p>
<p>ich versuche mich gerade in OOP mit c++ und versuche anhand des Socket Artikels hier im forum eine Klasse selbst zu bauen und so die Theorien aus den Klassen-Tutorials im netz in die tat umzusetzen.</p>
<p>Jetzt hängt sich aber mein Programm an der genannten stelle im topic auf. Und ich weiß nicht woran das liegt.</p>
<p>Die klasse befindet sich noch einem sehr frühen stadium und ich lerne gerade noch mit klassen umzugehen, also entschuldigt die vieleicht konfuse art des quellcodes.</p>
<p>Hier mal das komplette projekt</p>
<p><strong>main.cpp</strong></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

#include &quot;http.h&quot;

int main(void)
{
	http HTTP;
	std::string page = HTTP.GET(&quot;www.google.de&quot;);

	system(&quot;pause&quot;);
	return 0;
}
</code></pre>
<p><strong>http.h</strong></p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;winsock2.h&gt;

#pragma comment(lib, &quot;WS2_32.lib&quot;)

class http
{
	/* Private Variablen */
private:
	bool initialized;
	hostent* p_hostent;

	/* Private Methoden */
private:
	bool init();
	bool resolveHost(std::string host);
	bool request(std::string uri);

	/* Öffentliche Variablen */
public:
	std::string Hostname;
	std::string Aliases;

	/* Öffentliche Methoden */
public:
	http();
	std::string GET(std::string URI);
};
</code></pre>
<p><strong>http.cpp</strong></p>
<pre><code class="language-cpp">#include &quot;http.h&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;

http::http()
{
	initialized = false;
}

std::string http::GET(std::string URI)
{
	if (request(URI))
		return &quot;Done\n&quot;;
	else
		return &quot;Nothing...\n&quot;;
}

bool http::request(std::string uri)
{
	if (!initialized)
		init();

	int Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (Socket == -1)
	{
		std::cout &lt;&lt; &quot;Socket konnte nicht erstellt werden!&quot; &lt;&lt; std::endl;
		return false;
	}

	sockaddr_in service;
	service.sin_family = AF_INET;
	service.sin_port = htons(80);

	char** p_AdressList = p_hostent-&gt;h_addr_list;
	int result;
	do
	{
		if (*p_AdressList == NULL)
		{
			std::cout &lt;&lt; &quot;Verbindung fehlgeschlagen!&quot; &lt;&lt; std::endl;
			return false;
		}
		service.sin_addr.s_addr = *reinterpret_cast&lt;unsigned long*&gt;(*p_AdressList);
		++p_AdressList;
		result = connect(Socket, reinterpret_cast&lt;sockaddr*&gt;(&amp;service), sizeof(service));
	} while (result == -1);
	std::cout &lt;&lt; &quot;Verbindung erfolgreich!&quot; &lt;&lt; std::endl;

	closesocket(Socket);
	return true;
}

bool http::init()
{
	WSADATA w;
	if (int result = WSAStartup(MAKEWORD(2, 2), &amp;w) != 0)
	{
		std::cout &lt;&lt; &quot;Winsock 2 konnte nicht gestartet werden! Error #&quot; &lt;&lt; result &lt;&lt; std::endl;
		return false;
	}
	initialized = true;
	return true;
}

bool http::resolveHost(std::string host)
{
	if (!initialized)
		init();

	p_hostent = gethostbyname(host.c_str());
	if (p_hostent == NULL)
	{
		std::cout &lt;&lt; &quot;Host konnte nicht aufgelöst werden!&quot; &lt;&lt; std::endl;
		return false;
	}

	Hostname = p_hostent-&gt;h_name;
	for (char** alias = p_hostent-&gt;h_aliases; *alias != 0; ++alias)
	{
		Aliases += *alias;
	}

	if (p_hostent-&gt;h_addrtype != AF_INET)
	{
		std::cout &lt;&lt; &quot;Ungueltiger Adresstyp!&quot; &lt;&lt; std::endl;
		return false;
	}
	if (p_hostent-&gt;h_length != 4)
	{
		std::cout &lt;&lt; &quot;Ungueltiger IP-Typ!&quot; &lt;&lt; std::endl;
		return false;
	}

	return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/180126/zugriffsverletzung-bei-simpler-übergabe-quot-h_addr_list-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 12:35:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180126.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Apr 2007 11:06:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriffsverletzung bei simpler übergabe &amp;quot;h_addr_list&amp;quot; on Sun, 29 Apr 2007 11:06:32 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>ich versuche mich gerade in OOP mit c++ und versuche anhand des Socket Artikels hier im forum eine Klasse selbst zu bauen und so die Theorien aus den Klassen-Tutorials im netz in die tat umzusetzen.</p>
<p>Jetzt hängt sich aber mein Programm an der genannten stelle im topic auf. Und ich weiß nicht woran das liegt.</p>
<p>Die klasse befindet sich noch einem sehr frühen stadium und ich lerne gerade noch mit klassen umzugehen, also entschuldigt die vieleicht konfuse art des quellcodes.</p>
<p>Hier mal das komplette projekt</p>
<p><strong>main.cpp</strong></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

#include &quot;http.h&quot;

int main(void)
{
	http HTTP;
	std::string page = HTTP.GET(&quot;www.google.de&quot;);

	system(&quot;pause&quot;);
	return 0;
}
</code></pre>
<p><strong>http.h</strong></p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;winsock2.h&gt;

#pragma comment(lib, &quot;WS2_32.lib&quot;)

class http
{
	/* Private Variablen */
private:
	bool initialized;
	hostent* p_hostent;

	/* Private Methoden */
private:
	bool init();
	bool resolveHost(std::string host);
	bool request(std::string uri);

	/* Öffentliche Variablen */
public:
	std::string Hostname;
	std::string Aliases;

	/* Öffentliche Methoden */
public:
	http();
	std::string GET(std::string URI);
};
</code></pre>
<p><strong>http.cpp</strong></p>
<pre><code class="language-cpp">#include &quot;http.h&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;

http::http()
{
	initialized = false;
}

std::string http::GET(std::string URI)
{
	if (request(URI))
		return &quot;Done\n&quot;;
	else
		return &quot;Nothing...\n&quot;;
}

bool http::request(std::string uri)
{
	if (!initialized)
		init();

	int Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (Socket == -1)
	{
		std::cout &lt;&lt; &quot;Socket konnte nicht erstellt werden!&quot; &lt;&lt; std::endl;
		return false;
	}

	sockaddr_in service;
	service.sin_family = AF_INET;
	service.sin_port = htons(80);

	char** p_AdressList = p_hostent-&gt;h_addr_list;
	int result;
	do
	{
		if (*p_AdressList == NULL)
		{
			std::cout &lt;&lt; &quot;Verbindung fehlgeschlagen!&quot; &lt;&lt; std::endl;
			return false;
		}
		service.sin_addr.s_addr = *reinterpret_cast&lt;unsigned long*&gt;(*p_AdressList);
		++p_AdressList;
		result = connect(Socket, reinterpret_cast&lt;sockaddr*&gt;(&amp;service), sizeof(service));
	} while (result == -1);
	std::cout &lt;&lt; &quot;Verbindung erfolgreich!&quot; &lt;&lt; std::endl;

	closesocket(Socket);
	return true;
}

bool http::init()
{
	WSADATA w;
	if (int result = WSAStartup(MAKEWORD(2, 2), &amp;w) != 0)
	{
		std::cout &lt;&lt; &quot;Winsock 2 konnte nicht gestartet werden! Error #&quot; &lt;&lt; result &lt;&lt; std::endl;
		return false;
	}
	initialized = true;
	return true;
}

bool http::resolveHost(std::string host)
{
	if (!initialized)
		init();

	p_hostent = gethostbyname(host.c_str());
	if (p_hostent == NULL)
	{
		std::cout &lt;&lt; &quot;Host konnte nicht aufgelöst werden!&quot; &lt;&lt; std::endl;
		return false;
	}

	Hostname = p_hostent-&gt;h_name;
	for (char** alias = p_hostent-&gt;h_aliases; *alias != 0; ++alias)
	{
		Aliases += *alias;
	}

	if (p_hostent-&gt;h_addrtype != AF_INET)
	{
		std::cout &lt;&lt; &quot;Ungueltiger Adresstyp!&quot; &lt;&lt; std::endl;
		return false;
	}
	if (p_hostent-&gt;h_length != 4)
	{
		std::cout &lt;&lt; &quot;Ungueltiger IP-Typ!&quot; &lt;&lt; std::endl;
		return false;
	}

	return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1275563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275563</guid><dc:creator><![CDATA[UnIoN]]></dc:creator><pubDate>Sun, 29 Apr 2007 11:06:32 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei simpler übergabe &amp;quot;h_addr_list&amp;quot; on Sun, 29 Apr 2007 13:52:16 GMT]]></title><description><![CDATA[<p>hab den fehler grad selbst gefunden</p>
<p>ich hatte vergesse die url aufzulösen, hat also nur ein funktionsaufruf gefehlt.</p>
<p>entschuldigt dass ich das nicht gesehen hab, damit wäre der thread hier erledigt und kann gelöscht/geschlossen werden</p>
<p>gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275682</guid><dc:creator><![CDATA[UnIoN]]></dc:creator><pubDate>Sun, 29 Apr 2007 13:52:16 GMT</pubDate></item></channel></rss>