Ich will in einem Chat -Programm Dateien über die Sockets übertragen.
Dazu gibt es ein Server- und ein Client-Programm. Der Server wählt über einen Opendialog ne Datei aus, und mit nem Klick auf 'Absenden' bekommt der User des Client-Programms die
Meldung, dass die Datei 'xxx.yyy' zum Abruf bereit steht. Dieser User wählt dann über 'selectdirectory' aus der Unit 'FileCtrl' ein Verzeichnis aus, und drückt auf 'Abholen'.
Wenn ich dann das Zielverzeichnis kontrolliere, ist die Datei zwar da. Bei Dateien unter 8 KB funktionierts, doch Dateien die diese Dateigröße überschreiten, sind im Zielverzeichnis halt
nur 8 Kilobyte groß. Es ist also so, dass die Methode, die ich verwende, eigentlich funktioniert, doch bei Dateien über 8 KB ist dann halt schluss, denn diese werden nur zum Teil übertragen
und sind somit nutzlos.
Das Ziel meines Programms, soll sein, Dateien im Netzwerk bequem und einfach zu übertragen.
Hier mein Quellcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| with opendialog1 do begin if execute then begin edit2.Text:=extractfilename(filename); end; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| if not (edit2.text='') then begin FStream := TFileStream.Create(opendialog1.filename, fmOpenRead); for i := 0 to serversocket2.socket.activeconnections-1 do begin serversocket1.socket.connections[i].sendtext('Der Administrator hat folgende Datei zum Abruf bereit gestellt: '+extractfilename(opendialog1.filename)); sleep(100); serversocket1.socket.connections[i].SendText('file#'+extractfilename(opendialog1.filename)); sleep(300); serversocket2.socket.connections[i].sendstream(fstream); sleep(500); end; end; |
Jetzt der Code ausm Client-Programm
Delphi-Quelltext
1: 2: 3: 4:
| if selectdirectory('Wo soll die gesendete Datei gespeichert werden?','',verzeichnis) then begin end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| if (s[1]+s[2]+s[3]+s[4]+s[5]='file#') then begin dateiname_empfangen:=''; for i := 6 to length(s) do begin dateiname_empfangen:=dateiname_empfangen+s[i]; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var FStream: TFileStream; SizeOfFile: Integer; pBuffer: Pointer; begin
FStream := TFileStream.Create(verzeichnis+'\'+dateiname_empfangen, fmcreate or fmOpenWrite); SizeOfFile := clientsocket2.Socket.ReceiveLength; GetMem(pBuffer, SizeOfFile); try clientsocket2.Socket.ReceiveBuf(pBuffer^, SizeOfFile); FStream.Write(pBuffer^, SizeOfFile); finally FreeMem(pBuffer); FStream.Free; end; |
Wie gesagt, das Problem ist dass nur maximal 8 Kilobyte übertragen werden. Ich würde mich sehr freuen, wenn ihr mir sagen könntet, wo das Problem liegt, weil das Program fürs
Schulznetzwerk gedacht ist (der Lehrer hat übrigens KEIN Problem damit) und das neue Schuljahr bei uns angefangen hat und es daher ziemlich eilig ist.
Danke
MfG Koller
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot