<?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[socket problem]]></title><description><![CDATA[<p>Hi,<br />
ich hab ein problem mit sockets. ich hab mir ein kleiner konsolen programm geschrieben, dass mir von einem webserver eine php-datei runterlädt. das programm geht auch soweit. ich bekomme von server auch was zurück aber irgendwie kommen immer wieder zeichen, die da eigentlich nicht hingehören. ich fordere von meinem webserver die line.php die einfach nur 1000 zeilen mit einer von programm übergebenen post-variable ausgibt.</p>
<p>line.php</p>
<pre><code>&lt;?php
  for($i = 0; $i &lt; 1000; $i++)
    echo $_POST[&quot;test&quot;] . &quot;:&quot; . ($i+1) . &quot;\n&quot;;
?&gt;
</code></pre>
<p>hier noch der code vom programm.</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;string&gt;
#include &lt;stdlib.h&gt;

#ifdef _WIN32 // Windows System
#include &lt;winsock.h&gt;
#include &lt;io.h&gt;
#endif

void main() {
	WSADATA wsaData;
	if (WSAStartup (MAKEWORD(1, 1), &amp;wsaData) != 0) {
		fprintf (stderr,&quot;WSAStartup(): Kann Winsock nicht initialisieren.\n&quot;);
		exit (EXIT_FAILURE);
	}

	int s = socket (AF_INET,SOCK_STREAM,0);
	if(s == -1)  {
		cout &lt;&lt; &quot;Socket konnte nicht erstellt werden&quot; &lt;&lt; endl;
		exit(s);
	}
	else
		cout &lt;&lt; &quot;Socket erstellt&quot; &lt;&lt; endl;
	struct sockaddr_in server_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(80); //HTTP-Port
	server_addr.sin_addr.S_un.S_addr = inet_addr(&quot;127.0.0.1&quot;);
	if(connect(s ,(sockaddr*) &amp;server_addr, sizeof(server_addr)) == -1) {
		cout &lt;&lt; &quot;Verbindung konnte nicht erstellt werden&quot; &lt;&lt; endl;
		exit(-1);
	}
	else
		cout &lt;&lt; &quot;Connection erstellt&quot; &lt;&lt; endl;
    char* host = &quot;localhost&quot;;
    char* path = &quot;/line.php&quot;;
    char* postdata = &quot;test=line&quot;;
	char buffer[1024];
    sprintf(buffer, &quot;POST %s HTTP/1.1\r\n&quot;, path);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
    sprintf(buffer, &quot;Host: %s\n&quot;, host);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
	sprintf(buffer, &quot;Accept: */* \r\n&quot;);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
    sprintf(buffer, &quot;Content-type: application/x-www-form-urlencoded\r\n&quot;);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
    sprintf(buffer, &quot;Connection: close\r\n&quot;);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
    sprintf(buffer, &quot;Content-length: %d\r\n\r\n&quot;, strlen(postdata));
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
	sprintf(buffer, &quot;%s\r\n&quot;, postdata);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
	int bytes;
	FILE* file = fopen(&quot;line.txt&quot;,&quot;w+&quot;);
	do {
		bytes = recv(s,buffer,sizeof(buffer)-1,0);
		if(bytes &lt;= 0)
			break;
		else {
			buffer[bytes++] = '\0';
			for(int i = bytes; i &lt; sizeof(buffer);i++)
				buffer[i] = NULL;
			fprintf(file,&quot;%s&quot;,buffer);
			cout &lt;&lt; buffer;
		}
	} while(1);
	fclose(file);
#ifdef _WIN32
	closesocket(s);
	WSACleanup();
#else
	close(s);
#endif
}
</code></pre>
<p>jetzt noch die zeichen die immer wieder zwischen dem output erscheinen</p>
<blockquote>
<p>HTTP/1.1 200 OK<br />
Date: Sun, 25 Apr 2004 13:26:04 GMT<br />
Server: Apache/1.3.29 (Win32)<br />
X-Powered-By: PHP/4.3.5<br />
Connection: close<br />
Transfer-Encoding: chunked<br />
Content-Type: text/html</p>
<p>f43</p>
<p>line:1<br />
...<br />
line:446<br />
l</p>
<p>ffb</p>
<p>ine:447<br />
line:448<br />
...<br />
line:900<br />
line:9</p>
<p>37f</p>
<p>01<br />
line:902<br />
...<br />
line:1000</p>
<p>0</p>
</blockquote>
<p>ich hab den output gekürzt, immer da wo drei punkte sind komme keine unregelmäßigkeiten vor. hat irgendjemand eine ahnung wie es zu unregelmäßig kommt? ich bin mittlerweile schon verzweifelt, da ich das ganze wochenende den fehler schon gesucht hab und ihn bis jetzt nicht gefunden hab. ich hab das gleiche auch schon mit den qsockets klassen gemacht und da tratt der gleiche fehler auf. jemand ne idee? liegt es vielleicht an meinem lokalen apache? oder ist irgendwo ein fehler den ich übersehen hab.<br />
ciao noppenwelle</p>
<p>edit:<br />
am webserver liegt es nicht. hab es noch mit andere getestet und da traten die gleichen zeichen auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/72114/socket-problem</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 08:30:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/72114.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Apr 2004 13:51:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to socket problem on Sun, 25 Apr 2004 14:11:47 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich hab ein problem mit sockets. ich hab mir ein kleiner konsolen programm geschrieben, dass mir von einem webserver eine php-datei runterlädt. das programm geht auch soweit. ich bekomme von server auch was zurück aber irgendwie kommen immer wieder zeichen, die da eigentlich nicht hingehören. ich fordere von meinem webserver die line.php die einfach nur 1000 zeilen mit einer von programm übergebenen post-variable ausgibt.</p>
<p>line.php</p>
<pre><code>&lt;?php
  for($i = 0; $i &lt; 1000; $i++)
    echo $_POST[&quot;test&quot;] . &quot;:&quot; . ($i+1) . &quot;\n&quot;;
?&gt;
</code></pre>
<p>hier noch der code vom programm.</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;string&gt;
#include &lt;stdlib.h&gt;

#ifdef _WIN32 // Windows System
#include &lt;winsock.h&gt;
#include &lt;io.h&gt;
#endif

void main() {
	WSADATA wsaData;
	if (WSAStartup (MAKEWORD(1, 1), &amp;wsaData) != 0) {
		fprintf (stderr,&quot;WSAStartup(): Kann Winsock nicht initialisieren.\n&quot;);
		exit (EXIT_FAILURE);
	}

	int s = socket (AF_INET,SOCK_STREAM,0);
	if(s == -1)  {
		cout &lt;&lt; &quot;Socket konnte nicht erstellt werden&quot; &lt;&lt; endl;
		exit(s);
	}
	else
		cout &lt;&lt; &quot;Socket erstellt&quot; &lt;&lt; endl;
	struct sockaddr_in server_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(80); //HTTP-Port
	server_addr.sin_addr.S_un.S_addr = inet_addr(&quot;127.0.0.1&quot;);
	if(connect(s ,(sockaddr*) &amp;server_addr, sizeof(server_addr)) == -1) {
		cout &lt;&lt; &quot;Verbindung konnte nicht erstellt werden&quot; &lt;&lt; endl;
		exit(-1);
	}
	else
		cout &lt;&lt; &quot;Connection erstellt&quot; &lt;&lt; endl;
    char* host = &quot;localhost&quot;;
    char* path = &quot;/line.php&quot;;
    char* postdata = &quot;test=line&quot;;
	char buffer[1024];
    sprintf(buffer, &quot;POST %s HTTP/1.1\r\n&quot;, path);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
    sprintf(buffer, &quot;Host: %s\n&quot;, host);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
	sprintf(buffer, &quot;Accept: */* \r\n&quot;);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
    sprintf(buffer, &quot;Content-type: application/x-www-form-urlencoded\r\n&quot;);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
    sprintf(buffer, &quot;Connection: close\r\n&quot;);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
    sprintf(buffer, &quot;Content-length: %d\r\n\r\n&quot;, strlen(postdata));
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
	sprintf(buffer, &quot;%s\r\n&quot;, postdata);
    if(send(s, buffer, strlen(buffer), 0) == -1)
		cout &lt;&lt; &quot;Fehler beim senden von:&quot; &lt;&lt; buffer &lt;&lt; endl;
	int bytes;
	FILE* file = fopen(&quot;line.txt&quot;,&quot;w+&quot;);
	do {
		bytes = recv(s,buffer,sizeof(buffer)-1,0);
		if(bytes &lt;= 0)
			break;
		else {
			buffer[bytes++] = '\0';
			for(int i = bytes; i &lt; sizeof(buffer);i++)
				buffer[i] = NULL;
			fprintf(file,&quot;%s&quot;,buffer);
			cout &lt;&lt; buffer;
		}
	} while(1);
	fclose(file);
#ifdef _WIN32
	closesocket(s);
	WSACleanup();
#else
	close(s);
#endif
}
</code></pre>
<p>jetzt noch die zeichen die immer wieder zwischen dem output erscheinen</p>
<blockquote>
<p>HTTP/1.1 200 OK<br />
Date: Sun, 25 Apr 2004 13:26:04 GMT<br />
Server: Apache/1.3.29 (Win32)<br />
X-Powered-By: PHP/4.3.5<br />
Connection: close<br />
Transfer-Encoding: chunked<br />
Content-Type: text/html</p>
<p>f43</p>
<p>line:1<br />
...<br />
line:446<br />
l</p>
<p>ffb</p>
<p>ine:447<br />
line:448<br />
...<br />
line:900<br />
line:9</p>
<p>37f</p>
<p>01<br />
line:902<br />
...<br />
line:1000</p>
<p>0</p>
</blockquote>
<p>ich hab den output gekürzt, immer da wo drei punkte sind komme keine unregelmäßigkeiten vor. hat irgendjemand eine ahnung wie es zu unregelmäßig kommt? ich bin mittlerweile schon verzweifelt, da ich das ganze wochenende den fehler schon gesucht hab und ihn bis jetzt nicht gefunden hab. ich hab das gleiche auch schon mit den qsockets klassen gemacht und da tratt der gleiche fehler auf. jemand ne idee? liegt es vielleicht an meinem lokalen apache? oder ist irgendwo ein fehler den ich übersehen hab.<br />
ciao noppenwelle</p>
<p>edit:<br />
am webserver liegt es nicht. hab es noch mit andere getestet und da traten die gleichen zeichen auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/508436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/508436</guid><dc:creator><![CDATA[noppenwelle]]></dc:creator><pubDate>Sun, 25 Apr 2004 14:11:47 GMT</pubDate></item><item><title><![CDATA[Reply to socket problem on Sun, 25 Apr 2004 21:52:45 GMT]]></title><description><![CDATA[<p>hab das problem behoben. musste http/1.1 in http/1.0 ändern dann tritt der fehler nicht mehr auf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/508740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/508740</guid><dc:creator><![CDATA[noppenwelle]]></dc:creator><pubDate>Sun, 25 Apr 2004 21:52:45 GMT</pubDate></item></channel></rss>