Problem mit Winsock



  • Hallo, ich habe folgendes Problem. Ich habe einen Server, bei dem sich sonst wunderbar POSTs durchführen lassen mit folgender Funktion:

    #include <winsock2.h>
    #include <windows.h>
    #include <string>
    #include <iostream>
    
    string PostData(string data)
    {
    	char* host;
    	string  send_buf, retstring;
    	char  recv_buf[2056];
    	long  rc;
    	  SOCKET s;
    	  SOCKADDR_IN addr;
    	WSADATA wsa;
    	HOSTENT* hent;
    
    	WSAStartup(MAKEWORD(2,0),&wsa);
    	addr.sin_family=AF_INET;
    	addr.sin_port=htons(80);
    	host = "www.ogame272.de";
    
    	if((addr.sin_addr.s_addr=inet_addr(host))==INADDR_NONE)
    	{
    		hent=gethostbyname(host);
    		strncpy((char*)&addr.sin_addr.s_addr,hent->h_addr,4);
    	}
    	int zahl=0;
    
    	s=socket(AF_INET,SOCK_STREAM,0);
    	connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    
    	send(s,data.c_str(),strlen(data.c_str()),0);
    
    	while((rc=recv(s,recv_buf,1,0))>0)
    	{
    		recv_buf[rc]='\0';
    		retstring += recv_buf; 
    	}	
    
    	closesocket(s); //verbindung kappen
    
    	Sleep(50);
    	return retstring;
    }
    

    Nicht schön, aber funktioniert. Ich kann also jetzt einfach einen String übergeben, der den gesamten POST Befehl erhält, inklusive Daten und Header. Das geht auch wunderbar, aber jetzt kommt plötzlich eine Stelle, wo der Server anscheinend statt "Connection: close" ein "Connection: Keep-Alive" verlangt. Hierbei geht das nicht mehr, er sendet keinen Content zurück, nur noch den Header:

    HTTP/1.1 200 OK
    Date: Mon, 10 Oct 2005 19:24:47 GMT
    Server: Apache/2.0.54 (Unix) PHP/4.4.0
    X-Powered-By: PHP/4.4.0
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Vary: Accept-Encoding
    Content-Encoding: gzip
    Content-Length: 2
    Connection: close
    Content-Type: text/html
    

    Die zwei Zeichen content sind einfach \n\n.
    **
    Nun hab ich mir gedacht, dass dieses Keep-Alive vielleicht heisst, dass nach diesem Header noch weitere Daten kommen, aber die recv() Funktion einfach nach den ersten Daten, also dem HTTP-Response-Header, abbricht.**

    Gibt es einen Weg an die Daten die da noch folgen heran zu kommen? Irgendeine Funktion die das macht?

    Ps: Der Post ist korrekt, 1:1 vom IE übernommen, auch mit FF probiert.

    Danke für Hilfe!



  • zeig doch mal was du dem server schickst.

    (scheint nichts mit winsock zu tun zu haben, sondern mit http)



  • POST http://xxxxxx.de/xxxx/xxxxx.php?session=xxxxxx HTTP/1.1
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shock
    wave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, /
    Referer: http://xxxxx.de/xxxx/xxxx3.php?session=xxxxx
    Accept-Language: de
    Content-type: application/x-www-form-urlencoded
    User-Agent: Statistikleser
    Host: http://xxxx.de
    Content-length: 323
    Keep-Alive: 300
    Cache-Control: no-cache
    Cookie: PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; U_dexx:xxxxx=U_dexx%3ARxxxxx
    Connection: Keep-Alive

    PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&thisgalaxy=7&thissystem=415&thisplane
    t=11&thisplanettype=1&speedfactor=1&thisresource1=100&thisresource2=100&thisreso
    urce2=101&galaxy=7&system=415&planet=11&planettype=1&ship210=10&consumption210=1
    &speed210=170000000&capacity210=5&speed=10&order=1&resource1=&resource2=&resourc
    e3=



  • Die Daten sind aber zusammenhängend, da wurde jetzt nur ein Zeilenumbruch eingefügt, weil ich das aus der Konsole kopiert habe



  • Wir werden dich ausfindig machen und bannen.

    Sowas erlauben wir nicht.

    §3 Eingriffe in die Spieltechnik
    Maßnahmen, die übermäßigen Traffic verursachen oder dazu geeignet sind, den Spielablauf zu beeinträchtigen, sind zu unterlassen. Verboten sind insbesondere automatische oder halbautomatische Scripts, die Abfragen auf die Datenbank ausführen oder Spielmechanismen in Gang setzen. Ein Verstoß dagegen führt zum sofortigen Ausschluss aus dem Spiel. Ersatzforderungen in Höhe des verursachten Schaden zzgl. des daraus resultierenden Verwaltungsaufwandes behalten wir uns vor (siehe auch AGB).



  • Mhhh mich würde das aber auch interessieren, hab den thread hier über die SuFu gefunden. Hab nix mit diesem Spiel am Hut, würd aber die Behandlung von Keep Alives trotzdem gerne wissen. Ich habe nämlich das selbe Problem, allerdings nicht bei einem online spiel oder so ein kinderkack.


Anmelden zum Antworten