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/htmlDie 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-AlivePHPSESSID=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.