ch
16.06.2005, 14:05
Hi, ich versuche grade eine datei aus dem netz runterzuladen das lappt solange ich auf dem standard port bleibe auch ganz gut nur wenn ich einen anderen Port nehme bleibt das Programm hngen ( nehme an das liegt am blocking der socks).
Hier erstmal mein Code:
static void u_GetHTTPFile(const userinput * const u){
int sock;
struct sockaddr_in host_addr;
struct hostent *hostinfo;
char *host, *file;
char command[1024];
char buf[1024];
int bytes_sent, bytes_recv;
FILE * G_Out;
host = u->arg1;
file = u->arg2;
/* Socket erzeugen */
sock = socket (AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
perror ("socket()");
exit (EXIT_FAILURE);
}
/* Adresse des Servers festlegen */
memset( &host_addr, 0, sizeof (host_addr));
host_addr.sin_family = AF_INET;
host_addr.sin_port = htons (3333); //mom versuche ich es auf port 3333 natuerlich luft auch ein http server dort
host_addr.sin_addr.s_addr = inet_addr (host);
if (host_addr.sin_addr.s_addr == INADDR_NONE) {
/* Server wurde nicht mit IP sondern mit dem Namen angegeben */
hostinfo = gethostbyname (host);
if (hostinfo == NULL) {
u_respond(u,"gethostbyname()");
return;
}
memcpy((char*) &host_addr.sin_addr.s_addr, hostinfo->h_addr, hostinfo->h_length);
}
/* Verbindung aufbauen */
if (connect(sock, (struct sockaddr *) &host_addr, sizeof(struct sockaddr)) == -1) {
u_respond(u,"connect()");
return;
}
/* HTTP-GET-Befehl erzeugen */
sprintf (command, "GET %s HTTP/1.0\nHost:%s\n\n",file, host);
/* Befehl senden */
bytes_sent = send (sock, command, strlen (command), 0);
if (bytes_sent == -1) {
u_respond(u,"send()");
return;
}
// Antwort des Servers empfangen und ausgeben */
G_Out = fopen("OUT.TXT","w");
while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) {
fputs(buf, G_Out);
}
fclose(G_Out);
if (bytes_recv == -1) {
u_respond(u,"recv()");
return;
}
return;
}
hab schon einige http requests versucht klappen mag leider keiner so richtig.
plz help
TIA ch
Hier erstmal mein Code:
static void u_GetHTTPFile(const userinput * const u){
int sock;
struct sockaddr_in host_addr;
struct hostent *hostinfo;
char *host, *file;
char command[1024];
char buf[1024];
int bytes_sent, bytes_recv;
FILE * G_Out;
host = u->arg1;
file = u->arg2;
/* Socket erzeugen */
sock = socket (AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
perror ("socket()");
exit (EXIT_FAILURE);
}
/* Adresse des Servers festlegen */
memset( &host_addr, 0, sizeof (host_addr));
host_addr.sin_family = AF_INET;
host_addr.sin_port = htons (3333); //mom versuche ich es auf port 3333 natuerlich luft auch ein http server dort
host_addr.sin_addr.s_addr = inet_addr (host);
if (host_addr.sin_addr.s_addr == INADDR_NONE) {
/* Server wurde nicht mit IP sondern mit dem Namen angegeben */
hostinfo = gethostbyname (host);
if (hostinfo == NULL) {
u_respond(u,"gethostbyname()");
return;
}
memcpy((char*) &host_addr.sin_addr.s_addr, hostinfo->h_addr, hostinfo->h_length);
}
/* Verbindung aufbauen */
if (connect(sock, (struct sockaddr *) &host_addr, sizeof(struct sockaddr)) == -1) {
u_respond(u,"connect()");
return;
}
/* HTTP-GET-Befehl erzeugen */
sprintf (command, "GET %s HTTP/1.0\nHost:%s\n\n",file, host);
/* Befehl senden */
bytes_sent = send (sock, command, strlen (command), 0);
if (bytes_sent == -1) {
u_respond(u,"send()");
return;
}
// Antwort des Servers empfangen und ausgeben */
G_Out = fopen("OUT.TXT","w");
while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) {
fputs(buf, G_Out);
}
fclose(G_Out);
if (bytes_recv == -1) {
u_respond(u,"recv()");
return;
}
return;
}
hab schon einige http requests versucht klappen mag leider keiner so richtig.
plz help
TIA ch