Sessions
-
wenn ich mir die nReciveStatus ansehen ist diese auf -1 nach dem recv(). das heißt doch, dass das ganze ien fehrlschlag ist, oder? dann wäre es nämlich kein wunder dass der nix ausgibt. bei -1 geht der ja auch nicht ins if rein, was danach kommt.
-
Übergib recv mal nicht 1000 sondern z.B. 5
-
da ändert sich dann auch nichts, wenn ich 5 oder 9 oer 17 oder so mache. aber mit dem request hat der fehler jetzt nichts zu tun, oder? nich das der request falsch ist.
-
gib dir doch mal den Request mit cout aus und teste ihn mit telnet (poste ihn am besten noch hier rein).
-
der request sieht eigentlich richtig aus. nur dass halt \r\n vom compiler interprestiert werden. muss ich die zeichen escapen?
-
der request sieht so aus:
GET /content/news/index.php HTTP 1.0
Host: www.futures-net.dedie \r\n werden ja bei der ausgabe vom compiler interpretiert. is das vl der fehler?
-
wie sieht dein quellcode im moment aus?
-
im moment sieht der so aus:
/* INFORMATIONEN ZUM PROGRAMM: * * * * * * * * * * * * * * * * * * * * * * * * * * Sinn und Zweck: * ============== * Socketverbindung zu entferntem Server um Datei anzusprechen * * Hilfe, Tutorials, MSDN, etc.: * ========================= * RFC zu HTTP >>>>> http://www.faqs.org/rfcs/rfc2616.html * CodingCommunity >>>>> http://www.codingcommunity.de/wbb2/thread.php?postid=17671#post17671 * c-plusplus.net Forum >>>>> http://www.c-plusplus.net/forum/viewtopic-var-p-is-890601.html#890601 * C++ Forum >>>>> http://www.fun-soft.de/showtopic.php?threadid=12887&post_start=lastpage&time=1129121979 * Socket Tutorial >>>>> http://beej.us/guide/bgnet/output/htmlsingle/bgnet.html#sendrecv * * Einbinden in Günthers Programm: * ============================ * Ausgaben entfernen & Zielserver, Verzeichnisstruktur, etc. im Konstruktor statisch festlegen */ #include <iostream> #include <string> #include <stdlib.h> using namespace std; #include <winsock.h> // // CHttpRequest // class CHttpRequest { private: string m_strServer; // Name des Zielservers (z.b. www.microsoft.com) string m_strFolder; // Serververzeichnis der Zieldatei string m_strUrl; // Komplette Ziel-URL (z.b. www.microsoft.com/windows/default.aspx) char m_szIp[20]; // IP Adresse des Zielservers, ermittelt nach dem Name char m_szRespose[ 1000 ]; // variable für die HTTP-Response SOCKET m_Socket; // Für Socketverbindung WSADATA m_wsaData; // Für Socketverbindung sockaddr_in m_Address; // Für Socketverbindung public: // // Konstruktor // CHttpRequest( void ) { // Initialisieren mit leeren Werten this->m_strServer = ""; this->m_strFolder = ""; this->m_strUrl = ""; strcpy( this->m_szIp, "" ); strcpy( this->m_szRespose, "" ); } // // Destruktor // ~CHttpRequest( void ) { WSACleanup(); } // // URL einlesen und IP ermitteln // void SetServerInformation( void ) { if( 0 != WSAStartup( MAKEWORD(1,2), &this->m_wsaData) ) cout << "WSA konnte nicht initialisiert werden."; // URL einlesesn cout << endl << " Server eingeben (z.b. www.microsoft.com):" << endl << " >> "; cin >> this->m_strServer; // Verzeichnis einlesen cout << endl << " Verzeichnis eingeben (z.b. /windows/default.aspx):" << endl << " >> "; cin >> this->m_strFolder; // URL zusammensetzen this->m_strUrl = this->m_strServer + this->m_strFolder; // IP ermitteln hostent *dns = gethostbyname( this->m_strServer.c_str() ); sprintf( this->m_szIp, "%u.%u.%u.%u", ( unsigned char ) dns->h_addr_list[0][0], ( unsigned char ) dns->h_addr_list[0][1], ( unsigned char ) dns->h_addr_list[0][2], ( unsigned char ) dns->h_addr_list[0][3] ); // Ausgabe cout << endl << " IP Adresse des Servers:" << endl << " >> " << this->m_szIp << endl; cout << endl << " Zielverzeichnis:" << endl << " >> " << this->m_strUrl << endl; } // // Verbindung aufbauen // void Connect( void ) { // Socket erstellen m_Address.sin_family = AF_INET; m_Address.sin_port = htons( 80 ); // 80 = Port m_Address.sin_addr.s_addr = inet_addr( this->m_szIp); // Socket initialisieren this->m_Socket = socket( AF_INET, SOCK_STREAM, 0); if( 0 == this->m_Socket ) cout << endl << " Statusmeldung" << endl << " >> Fehler - Socket konnte nicht initialisiert werden."; // Verbindung aufbauen if( -1 == connect( ( SOCKET ) this->m_Socket, ( sockaddr * ) &this->m_Address, sizeof( this->m_Address ) ) ) cout << endl << " Statusmeldung" << endl << " >> Fehler - Verbindung konnte nicht hergestellt werden."; // Port zuweisen Nötig ??? //bind( ( SOCKET ) this->m_Socket, ( sockaddr * ) &this->m_Address, 0 ); } // // HTTP Request ausführen // void DoHttpRequest( void ) { // Request zusammenstellen und abschicken //string strRequestMessage = "GET " + this->m_strUrl + " HTTP/1.1"; //string strRequestMessage = "GET " + this->m_strFolder + " \r\n\r\n HTTP/1.0 \r\n Host: " + this->m_strServer + " \r\n \r\n"; string strRequestMessage = "GET " + this->m_strFolder +" HTTP/1.1\r\n" + "Referer: " + this->m_strServer + "\r\n" + "User-Agent: IG Application\r\nAccept-Charset: windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1\r\n" + "Host: " + this->m_strServer + "\r\n" + "Accept-Encoding: chunked\r\n\r\n"; cout << endl << strRequestMessage; // Request erfolgreich ausgeführt if( send( (SOCKET) this->m_Socket, strRequestMessage.c_str(), strlen( strRequestMessage.c_str() ), 0 ) ) { // Statusmeldung ausgeben cout << endl << " HTTP Request:" << endl << " >> Uebertragung erfolgreich" << endl << endl << " "; // Response auswerten und ausgeben int nReciveStatus = recv( ( SOCKET ) this->m_Socket, this->m_szRespose, 1000, 5 ); if( nReciveStatus > 0 ) { cout << endl << " HTTP Response:" << endl << " >> " << this->m_szRespose; this->m_szRespose[ nReciveStatus ] = 0; cout << endl << " >> " << this->m_szRespose; } ///////////////////// DEBUG ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// else cout << "DEBUG: nReciveStatus = " << nReciveStatus << endl << " " << WSAGetLastError(); } // Request fehlgeschlagen else cout << endl << " >> Uebertragung nicht erfolgreich. Request konnte nicht ausgeführt werden." << endl << endl << " "; } // // HTTP Response als string zurückgeben // string GetHttpResponse( void ) { return (string) m_szRespose; } // // Verbindung beenden // void Close( void ) { WSACleanup(); } }; // // Main // int main( void ) { CHttpRequest Request; // Methoden der Klasse aufrufen Request.SetServerInformation(); Request.Connect(); Request.DoHttpRequest(); Request.Close(); // Programmende cout << endl << endl << endl << endl << " "; system( "pause" ); return 0; }die probleme liegen in edr DoHttpRequest()
-
was soll die 5 bei recv?
-
wurde mir in einem post weiter oben empfohlen
-
dann glaub nicht alles was man dir sagt und lies in der dokumentation nach.
-
hmmmmmmmmmmmmmmmmm
in der doku stand 0 als letzer parameter, damit gings aber noch weniger als mit 5
-
aber du hattest ja selbst einfach 1000 beim letzten parameter eingesetzt. auch völlig schwachsinn.
-
na ja, benutz einfach 0 und such den fehler woanders. dort braucht man äußerst selten (sozusagen nie) etwas anderes als 0.
-
ok, aber wenn ich da wieder 0 hinschreibe, dann wartet der vergeblich auf eine antwort. haste du ne idee wo der fehler sein könnte? mir gehen die nämlich langsam aus
-
bei mir kommt was. eingaben sind:
-
ES KLAPPT JUHU. das mit er 0 war genau richtig

-
ach übrigens: danke für eure hilfe. ihr habt echt was drauf
-
ray_ray schrieb:
ach übrigens: danke für eure hilfe. ihr habt echt was drauf
ironie-tags vergessen?
-
ray_ray schrieb:
ach übrigens: danke für eure hilfe. ihr habt echt was draufironie-tags vergessen?
trottel-tags vergessen?
wie dem auch sein. da wir auch schonma beim thema http requests sind. gibt es eien möglichkeit ber http-befehl (z.b. als teil des header) logindaten für einen datenbankserver mitzuschicken? habe gehört, dass sowas schonmal gemacht wurde.