Dyner
31.08.2005, 20:56
Hallo,
nachdem ich die Probleme mit der anforderung der txt datei mit fremder hilfe lösen konnte, stehe ich nun vor dem nächsten problem:
ich möchte eine textdatei die auf einem server liegt regelmässig in mein programm einlesen können.
wenn ich die datei nun öfters einlesen will, funktioniert dies ein paarmal hintereinander bis send() -1 zurückliefert
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <string>
using namespace std;
#pragma comment (lib, "WSOCK32.lib");
int main()
{
WSADATA wsaData;
WSAStartup (MAKEWORD(1, 1), &wsaData);
int o_sock;
o_sock = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(80);
serv_addr.sin_addr.s_addr = inet_addr("213.202.241.46"); //Response vom Dns : Name: server1.funpic.de Adress: 213.202.241.46 Aliases: ansgarphp.an.funpic.de
int o_cnnct;
while(1)
{
o_cnnct = connect(o_sock, (sockaddr *) &serv_addr ,sizeof(sockaddr));
if (o_cnnct != -1)
{
cout << "connected" << endl;
break;
}
if (o_cnnct == -1)
{
cout << endl <<"fehler: connect == -1" << endl;
}
}
// Connection: keep-alive
char *tosend = "GET /test.txt HTTP/1.1\r\nHost: ansgarphp.an.funpic.de\r\nConnection: close\r\n\r\n"; //"GET /test.txt HTTP/1.1\r\nHost: ansgarphp.an.funpic.de\r\n\r\n"
int size = strlen(tosend);
size++;
char buf[5001];
int g;
string ausgabe;
while(1)
{
while(1)
{
int s = send(o_sock, tosend, size,0);
if(s == size) { break;}
if(s == -1)
{
cout << WSAGetLastError() << " " ;
}
s = 0;
getch();
}
cout << "sended" << endl;
g = recv(o_sock,buf,5000,0); //Daten vom Server empfangen
buf[g]='\0';
for(int loop = 0; loop < 5001; loop++)
{
ausgabe = ausgabe + buf[loop];
buf[loop] = NULL;
}
cout << ausgabe;
getch();
}
WSACleanup();
getch ();
return 0;
}
bestenfalls klappt es 13mal kurz hintereinander .
von getlasterror wird 10053 zurückgeliefert,
ich hoffe es hat jemand eine idee =)
mfg
nachdem ich die Probleme mit der anforderung der txt datei mit fremder hilfe lösen konnte, stehe ich nun vor dem nächsten problem:
ich möchte eine textdatei die auf einem server liegt regelmässig in mein programm einlesen können.
wenn ich die datei nun öfters einlesen will, funktioniert dies ein paarmal hintereinander bis send() -1 zurückliefert
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <string>
using namespace std;
#pragma comment (lib, "WSOCK32.lib");
int main()
{
WSADATA wsaData;
WSAStartup (MAKEWORD(1, 1), &wsaData);
int o_sock;
o_sock = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(80);
serv_addr.sin_addr.s_addr = inet_addr("213.202.241.46"); //Response vom Dns : Name: server1.funpic.de Adress: 213.202.241.46 Aliases: ansgarphp.an.funpic.de
int o_cnnct;
while(1)
{
o_cnnct = connect(o_sock, (sockaddr *) &serv_addr ,sizeof(sockaddr));
if (o_cnnct != -1)
{
cout << "connected" << endl;
break;
}
if (o_cnnct == -1)
{
cout << endl <<"fehler: connect == -1" << endl;
}
}
// Connection: keep-alive
char *tosend = "GET /test.txt HTTP/1.1\r\nHost: ansgarphp.an.funpic.de\r\nConnection: close\r\n\r\n"; //"GET /test.txt HTTP/1.1\r\nHost: ansgarphp.an.funpic.de\r\n\r\n"
int size = strlen(tosend);
size++;
char buf[5001];
int g;
string ausgabe;
while(1)
{
while(1)
{
int s = send(o_sock, tosend, size,0);
if(s == size) { break;}
if(s == -1)
{
cout << WSAGetLastError() << " " ;
}
s = 0;
getch();
}
cout << "sended" << endl;
g = recv(o_sock,buf,5000,0); //Daten vom Server empfangen
buf[g]='\0';
for(int loop = 0; loop < 5001; loop++)
{
ausgabe = ausgabe + buf[loop];
buf[loop] = NULL;
}
cout << ausgabe;
getch();
}
WSACleanup();
getch ();
return 0;
}
bestenfalls klappt es 13mal kurz hintereinander .
von getlasterror wird 10053 zurückgeliefert,
ich hoffe es hat jemand eine idee =)
mfg