Hallo,
ich will ein HTTP-Server basteln, da mein Freund ein Programm braucht um Daten einfach zu teilen.
z. B. Screenshots von World of Warcraft
Jetzt hat er das Problem, das er ein einfaches Programm braucht.
Ja dann hab ich mich heute mal hingesetzt, mir die TIdHTTPServer komponente angeschaut.
Ich hab mir als erstes das Senden ran gemacht, diese komischen Berechnungen sind berechnungen um bei schwacher verbindung weniger große Pakete zu senden und je besser die Verbindung desto größere Pakete werden gesendet. Die Variablen sind bei mir immer so komische, die eigentlich dazu nicht passen xD
Also hier mein senden code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
| procedure TFOrm1.send(AThread: TIdPeerThread); var items,test: String; maybe,size,maul,multi: Integer; fs, fn: TFileStream; zeichen: char; begin Memo1.Clear; connectedf:=True; sollichzaehln:=False; items:=''; inc(Intzaehler); multi:=1; try AThread.Start; fs := tFilestream.create('test.zip', FMOpenRead); size:=fs.Size; AThread.COnnection.WriteLn('HTTP/1.1 200 OK'); AThread.Connection.WriteLn('Server: hui1991s Fileserver'); AThread.COnnection.WriteLn('Accept-Ranges: bytes'); AThread.COnnection.WriteLn('Content-Length: '+inttostr(size)); AThread.COnnection.WriteLn('Connection: close'); AThread.COnnection.WriteLn('Content-Type: file/zip'); AThread.COnnection.WriteLn(''); sollichzaehln:=True; msekunden:=0; maul:=1; For maybe:=0 to size-1 do begin fs.read(zeichen,1); items:=items+zeichen; if length(items)>maul+1 then begin AThread.Connection.Write(items); items:=''; multi:=((maul+1) div (multi*3))+((1000 div (size div (maybe+1))+1)); maul:=((maybe div 1000) div ((msekunden div 1000)+1))*multi; if maul>0 then Memo1.Lines.Add(inttostr(maul)); end; end; if length(items)>0 then begin AThread.Connection.Write(items); items:=''; Label1.Caption:='100%..Fertig(Die Übertragung hat '+inttostr(msekunden div 1000)+' gedauert!|'+inttostr(((size * 8 div 1024)+1) div ((msekunden div 1000)+1)+20)+'KBit/s)'; end; sollichzaehln:=False; except Label1.Caption:='Error!'; fs.free; open:=false; end; fs.free; AThread.Stop; open:=false; end; |
Aufrufen tuhe ich es ganz einfach mit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.IdHTTPServer1Connect(AThread: TIdPeerThread); begin if not open then begin open:=True; send(AThread); end; end; |
Jetzt sind die Probleme die gemeinsam eine Kette bilden.
Wenn FlashGot eine Zweite verbindung aufbauen will macht es ein Error, dies verhinderte ich mit der variable open.
Dann wenn der Client die Verbindung abbricht, dann kommt bei mir ein Error.
Warscheinlich will er auf was Schreiben das es nicht gibt, ich aber net weis wie ich es beheben soll.
Dieses problem mit mehrverbindungen tritt wieder ein. Wenn ein Download bei mir stattfindet, dann kann ein zweiter CLient nicht drauf zugreifen, da der Server nicht antwortet. Könnt ihr mir bei diesem Problem helfen?
Wäre euch dankbar, denn ich finde keine Vorlagen. Ich hab einfach blind probiert.
MfG
hui1991