N
ok... mein letzter versuch hier... bekomm ja sowiso keine antwort
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <winsock.h>
#include <ctime>
using namespace std;
int main(){
char* host;
char send_buf[256];
char recv_buf[256];
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 = "serverirgendwas.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;
int zeit;
int zeit1;
zeit1 = time(NULL);
for (int repeat=0;repeat < 100; repeat++)
{
zeit = time(NULL);
s=socket(AF_INET,SOCK_STREAM,0);
connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
sprintf(send_buf,"GET //irgendwas.php HTTP/1.1\nHost: Hubsi.biz\n\n");
send(s,send_buf,strlen(send_buf),0);
while((rc=recv(s,recv_buf,1,0))>0)
{
recv_buf[rc]='\0';
cout << recv_buf;
}
cout << "Zeit: " << time(NULL)-zeit << " Sekunden." << endl;
closesocket(s); //verbindung kappen
}
cout << "Gesamtzeit: " << time(NULL)-zeit1 << " Sekunden." << endl;
Sleep(5000);
return 0;
}
also jetzt mal als konsolenanwendungsbeispiel: das gibt jetzt 100 mal den inhalt einer php datei aus. bei mir geht das sehr schnell, aber zwischen jedem neuen verbindungsaufbau vergehen ca. 3 sek. wenn ich aber nicht bis zum ende lese geht das 1000mal schneller.
wie erreiche ich das jetzt wenn ich nicht weiß wieviel daten ich bekomme wann es zu ende ist? damit ich kurz zuvor mit dem lesen aufhören kann.
(Content-Length gibt mein server gar nicht zurück...)
hab hier mal irgendwo was wie FIONREAD aufgeschnappt.. konnte aber nix gescheites dazu finden...
//so dauert es lange:
while((rc=recv(s,recv_buf,1,0))>0)
{
recv_buf[rc]='\0';
cout << recv_buf;
}
;wenn ich die anzahl der bytes kenne geht es viel schneller:
for (zahl=0;zahl < 2000;zahl++)
{
rc=recv(s,recv_buf,1,0);
recv_buf[rc]='\0';
cout << recv_buf;
}
---
und was ist jetzt mit winsock.h und winsoch2.h ??