Hi, habe folgendes problem. ich habe am wochenende einen HTTP Client mit Sockets geschrieben.
Soweit funktioniert auch alles, bis auf die Dateiübertragung. ich gebe hier auch mal besser ein sourceschnipselchen:
dies ist die schleife die die Daten vom Socket entgegennimmt und sie in eine Datei speichert:
for(counter=1;counter<=filesize;counter++)
{
ret=recv(dta,tbuf,1,0);
putc(tbuf[0],save);
}
kleine anmerkung:
int counter ist die Zählvariable vom typ unsigned long und filesize hat den gleichen typ und enthält den inhalt des Content-length: headers.
ret ist ein int ohne nähere bedeutung(nimmt halt die returncodes von recv und putc auf
dta ist vom typ SOCKET;
tbuf ist so defininert: char tbuf[1] = {0}; //Temporary Buffer
save ist ein FILE*-Struktur.
Also mein problem genau:
wenn ich eine Datei(im beispiel nur Textdatei) übertrage, bekomme ich wenn ein newline kommt in meiner ausgabedatei statt den Ascii-Codes 13 10(ist unter windows ein \n) 13 13 10 in der ausgabedatei.
meine frage nun: ist das normal, ist es beabsichtigt, und wenn ja, wie finde ich heraus, ob es nicht von der Datei verlangt wird(kann ja auch mal vorkommen, dass in einer datei regulär 13 13 10 steht
.
Ich freu mich schon auf antworten
zweite frage: ich habe in meinem Programm die dateigrösse aus dem Content-Length: header teil bekommen. da dieser naturgemäss über winsock als string und nicht als zahl reinkommt habe ich eine funktion unsigned long makeunsignedlongfromchar(char *code) programmiert die den string einliest, von jedem zeichen 48 abzieht(wenn es eine nummer ist, dann entspricht der wert genau der zahl) und dann die einzelne zahl mit 10^x hochnimmt. kleines beispiel:
die Zahl 1234 soll in einen Zahlendatentyp umgewandelt werden:
4*10^0 + 3 * 10^1 + 2*10^2 + 1*10^3
gibt es dafür eine WinSock funktion???