fehler bei send()
-
Hi,
ich hab folgendes Problem.
Wenn ichanzahl = send(s, befehl, sizeof(befehl),0);
ausführe, spricht das Programm sofort ab dieser Zeile raus.
Was ist daran falsch?
s ist der geöffnete Socket, der auch verbunden ist.
Der Befehl besteht aus einem char Array.
-
Was bedeutet "spricht das Programm sofort ab dieser Zeile raus"? Kannst Du nicht mehr anzeigen, was in Anzahl drinsteht und welche Werte errno annimmt?
Und etwas mehr Code (reproduzierbares Minimalbeispiel) wäre sehr fein.
-
Er bricht komplett ab, alle Zeilen Code die danach kommen werden nicht mehr angerührt, wenn ich diese Zeile auskommentiere, dann zeigt er alle weiteren zeilen (wenn auch mit komischen werten) an.
Also irgendwie ist dort der wurm drin.
viel code hab ich da nicht drin. nur die sockert öffnen und verbinden, beides wird auch auf ordnungsgemäße rückgabe geprüft und ist erfolgreich.
-
Ist befehl auch wikrlich das Array selbst und nicht nur ein Pointer auf den ersten Wert? - Zeig am besten mal bishcne mehr Code außen herum.
Gruß
-
int s, anzahl; struct sockaddr_in addr; char befehl[] = "GET /index.html HTTP/1.0\n\r"; char empfangene_zeichen[1023]; /* Adresswahl*/ addr.sin_addr.s_addr = inet_addr("10.10.0.99"); /* Explizite Wahl der Ports*/ addr.sin_port = htons(80); /* Erstellung eines Sockets */ s = socket(AF_INET, SOCK_STREAM, 0); if (s == -1){ perror("socket() failed"); return 1; } /* Verbindungsaufbau */ if (connect(s,(struct sockaddr *) &addr, sizeof(addr)) == -1){ perror("connect() failed"); return 1; }else{ printf("\n Verbindung erfolgt"); printf(", sende HTTP-Befehl:\n\n%s",befehl); anzahl = send(s, befehl, sizeof(befehl),0); if (anzahl == -1){ printf("send() fehlgeschlagen"); } printf(" es wurden %d Zeichen gesendet",anzahl); anzahl = recv(s, empfangene_zeichen,sizeof(befehl),0); empfangene_zeichen[anzahl]= '\0'; printf("\n es wurden %d Zeichen empfangen:",anzahl); printf("\n\n%s",empfangene_zeichen); }
hab mitlerweile das gefühl, dass es gar nicht am send liegt, sondern am connect oder sowas...
-
hat sich erledigt, hatte anscheinend viel vergessen zu deklarieren usw.
jetzt läufts
-
cmg schrieb:
...\n\r...
fehler. es heisst \r\n und das an jedem ende einer headerzeile und zwischen header und content nochmal.
sag mal, soll das wirklich c# code sein??
-
Ja, ich habs jetzt auch gemerkt
Ne, es soll ANSI C sein
-
sizeof(befehl)
macht bei einem char zwar keinen unterschied, aber der korrektheit wegen
strlen(befehl)
kann bei einem int schon bloeder sein