socket problem
-
Hi,
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.line.php
<?php for($i = 0; $i < 1000; $i++) echo $_POST["test"] . ":" . ($i+1) . "\n"; ?>hier noch der code vom programm.
main.cpp
#include <iostream.h> #include <stdio.h> #include <string.h> #include <string> #include <stdlib.h> #ifdef _WIN32 // Windows System #include <winsock.h> #include <io.h> #endif void main() { WSADATA wsaData; if (WSAStartup (MAKEWORD(1, 1), &wsaData) != 0) { fprintf (stderr,"WSAStartup(): Kann Winsock nicht initialisieren.\n"); exit (EXIT_FAILURE); } int s = socket (AF_INET,SOCK_STREAM,0); if(s == -1) { cout << "Socket konnte nicht erstellt werden" << endl; exit(s); } else cout << "Socket erstellt" << 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("127.0.0.1"); if(connect(s ,(sockaddr*) &server_addr, sizeof(server_addr)) == -1) { cout << "Verbindung konnte nicht erstellt werden" << endl; exit(-1); } else cout << "Connection erstellt" << endl; char* host = "localhost"; char* path = "/line.php"; char* postdata = "test=line"; char buffer[1024]; sprintf(buffer, "POST %s HTTP/1.1\r\n", path); if(send(s, buffer, strlen(buffer), 0) == -1) cout << "Fehler beim senden von:" << buffer << endl; sprintf(buffer, "Host: %s\n", host); if(send(s, buffer, strlen(buffer), 0) == -1) cout << "Fehler beim senden von:" << buffer << endl; sprintf(buffer, "Accept: */* \r\n"); if(send(s, buffer, strlen(buffer), 0) == -1) cout << "Fehler beim senden von:" << buffer << endl; sprintf(buffer, "Content-type: application/x-www-form-urlencoded\r\n"); if(send(s, buffer, strlen(buffer), 0) == -1) cout << "Fehler beim senden von:" << buffer << endl; sprintf(buffer, "Connection: close\r\n"); if(send(s, buffer, strlen(buffer), 0) == -1) cout << "Fehler beim senden von:" << buffer << endl; sprintf(buffer, "Content-length: %d\r\n\r\n", strlen(postdata)); if(send(s, buffer, strlen(buffer), 0) == -1) cout << "Fehler beim senden von:" << buffer << endl; sprintf(buffer, "%s\r\n", postdata); if(send(s, buffer, strlen(buffer), 0) == -1) cout << "Fehler beim senden von:" << buffer << endl; int bytes; FILE* file = fopen("line.txt","w+"); do { bytes = recv(s,buffer,sizeof(buffer)-1,0); if(bytes <= 0) break; else { buffer[bytes++] = '\0'; for(int i = bytes; i < sizeof(buffer);i++) buffer[i] = NULL; fprintf(file,"%s",buffer); cout << buffer; } } while(1); fclose(file); #ifdef _WIN32 closesocket(s); WSACleanup(); #else close(s); #endif }jetzt noch die zeichen die immer wieder zwischen dem output erscheinen
HTTP/1.1 200 OK
Date: Sun, 25 Apr 2004 13:26:04 GMT
Server: Apache/1.3.29 (Win32)
X-Powered-By: PHP/4.3.5
Connection: close
Transfer-Encoding: chunked
Content-Type: text/htmlf43
line:1
...
line:446
lffb
ine:447
line:448
...
line:900
line:937f
01
line:902
...
line:10000
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.
ciao noppenwelleedit:
am webserver liegt es nicht. hab es noch mit andere getestet und da traten die gleichen zeichen auf.
-
hab das problem behoben. musste http/1.1 in http/1.0 ändern dann tritt der fehler nicht mehr auf