| Autor |
Beitrag |
DeltaEx
      
Beiträge: 110
|
Verfasst: Mo 22.10.07 14:40
Hallo zusammen,
Wenn ich eine Datei verschicke in dem Fall eine *.exe Datei, kommt bei mir auf der anderen Seite paar bytes weniger an.
Orignal: 619.008 Bytes
Kopie: 614.400 Bytes
Woran liegt das wohl?
Hier der Code vom Server ... der Server Sendet:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm3.UpdateClient1Click(Sender: TObject); var Stream: TMemoryStream; ID:Integer; begin if UpdateOpenDialog.Execute then begin Stream := TMemoryStream.Create; try ID:=ID_Update; Stream.WriteBuffer(ID,SizeOf(ID)); Stream.LoadFromFile(UpdateOpenDialog.FileName); Form1.Server.SendStream(Connection, Stream); finally Stream.Free; end; end; end; |
Der Client der Empfängt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm2.TCPClientInput(Sender: TObject; Stream: TStream; var DisposeStream: Boolean); var Str:String; ID:Integer; UpdateFileStream:TFileStream; begin UpdateFileStream := TFileStream.Create(ExtractFilePath(ParamStr(0))+'update.exe',fmCreate); try UpdateFileStream.CopyFrom(Stream,Stream.Size); finally UpdateFileStream.Free; end; end; |
Woran kann es liegen?
Danke im voraus.
Moderiert von Narses: --- Beiträge zusammengefasst ---
Ahhh wenn ich beim Client Stream.Size-4 hinzufüge:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm2.TCPClientInput(Sender: TObject; Stream: TStream; var DisposeStream: Boolean); var Str:String; ID:Integer; UpdateFileStream:TFileStream; begin UpdateFileStream := TFileStream.Create(ExtractFilePath(ParamStr(0))+'update.exe',fmCreate); try UpdateFileStream.CopyFrom(Stream,Stream.Size-4); finally UpdateFileStream.Free; end; end; |
Dann bekomme ich mehr:
Original: 619.008 Bytes
Kopie: 619.004 Bytes
mmhh sehr komisch. Die exe ist aber immer noch kaputt
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
Moderiert von Narses: Topic aus Open Source Units verschoben am Mo 22.10.2007 um 14:43
_________________ Delphi forever
|
|
DeltaEx 
      
Beiträge: 110
|
Verfasst: Mi 24.10.07 10:17
Keiner eine Idee?
_________________ Delphi forever
|
|
DeltaEx 
      
Beiträge: 110
|
Verfasst: Mo 29.10.07 20:49
Hab immer noch keine Lösung ;-(
_________________ Delphi forever
|
|
DeltaEx 
      
Beiträge: 110
|
Verfasst: Di 06.11.07 16:35
Wenn mir dabei keiner helfen kann, hat dann einer vielleicht eine alternative Lösung?
_________________ Delphi forever
|
|
DeltaEx 
      
Beiträge: 110
|
Verfasst: Mi 07.11.07 23:14
Hallo Leute,
ich brächte echt dringend hilfe
Wäre es eine hilfe wenn ich das komplette Programm mit Sourcecode hochladen würde?
_________________ Delphi forever
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 08.11.07 00:47
Moin!
DeltaEx hat folgendes geschrieben: | ich brächte echt dringend hilfe  |
Nimm halt einen IdFTPServer und einen IdFTPClient.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 08.11.07 01:19
DeltaEx hat folgendes geschrieben: | | ich brächte echt dringend hilfe |
So ungern ich es sage, aber hier im Delphi-Forum hat man mit Netzwerkfragen Pech. Keine meiner netzwerktechnischen Fragen ist je beantwortet worden... (zumindest nicht so, dass mein Programm danach liefe) Schätze, was diese Sachen betrifft gibt es zu viele Faktoren (Proxy, Router, bestimmte Einstellungen etc.), als dass man eine klare Antwort auf diese Fragen geben könnte.
Ich tippe darauf, dass dein Code völlig korrekt ist und der Fehler in irgendeiner Einstellung steckt, oder einer Hardwarekonfiguration...
Das mit dem FTP Server/Client ist natürlich ein guter Ansatz, vorallem, weil ich es selbst so versucht hab, natürlich erfolglos. Wenn du eine Lösung (mit FTP?) gefunden hast, poste sie doch bitte, damit ich's auch mitbekomme
Viel Erfolg...
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 08.11.07 01:25
Moin!
JayEff hat folgendes geschrieben: | DeltaEx hat folgendes geschrieben: | | ich brächte echt dringend hilfe | So ungern ich es sage, aber hier im Delphi-Forum hat man mit Netzwerkfragen Pech. Keine meiner netzwerktechnischen Fragen ist je beantwortet worden... (zumindest nicht so, dass mein Programm danach liefe) Schätze, was diese Sachen betrifft gibt es zu viele Faktoren (Proxy, Router, bestimmte Einstellungen etc.), als dass man eine klare Antwort auf diese Fragen geben könnte. |
Und das liegt dann am Delphi-Forum?  Also, den Zusammenhang musst du mir nochmal erklären...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 08.11.07 09:22
Ändere doch mal den Client
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm2.TCPClientInput(Sender: TObject; Stream: TStream; var DisposeStream: Boolean); var Str:String; ID:Integer; UpdateFileStream:TFileStream; begin UpdateFileStream := TFileStream.Create(ExtractFilePath(ParamStr(0))+'update.exe',fmCreate); try Stream.Seek (SizeOf (Integer), soFromBeginning); UpdateFileStream.CopyFrom(Stream,Stream.Size-SizeOf (Integer)); finally UpdateFileStream.Free; end; end; |
Wie hoch ist denn Stream.Size?
Alternative: FTP oder die den Indy TCP-Server und die WriteFile-Methode...
_________________ Na denn, dann. Bis dann, denn.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Fr 09.11.07 00:45
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
DeltaEx 
      
Beiträge: 110
|
Verfasst: Mi 14.11.07 18:03
Danke für die Antworten.
@alzaimar
Leider habe ich mit dem Code das Gleiche Problem das mit 4 bytes fehlen.
Stream Größe:
Stream.Size-SizeOf (Integer) : 6961360
Stream.Size 6961364
Datei Größe Original: 6.961.364 Bytes
Datei Größe Kopie: 6.961.360 Bytes
_________________ Delphi forever
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 14.11.07 19:20
_________________ Na denn, dann. Bis dann, denn.
|
|
DeltaEx 
      
Beiträge: 110
|
Verfasst: Do 15.11.07 09:52
@alzaimar:
Vielen Dank das du dran bleibst.
Habe den Client und Server so angepasst wie du reingeschrieben hast.
Da habe ich ein Problem das der Client abstürzt.
Habe den Server Code so angepasst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm3.UpdateClient1Click(Sender: TObject); var Stream: TMemoryStream; Size, ID:Integer; begin if UpdateOpenDialog.Execute then begin Stream := TMemoryStream.Create; try Stream.LoadFromFile(UpdateOpenDialog.FileName);
Size := Stream.Size; Stream.WriteBuffer(Size, SizeOf(Size)); Form1.Server.SendStream(Connection, Stream); finally Stream.Free; end; end; end; |
Also
Delphi-Quelltext
auskommentiert.
Jetzt kriege ich aber leider nur 3 Bytes geladen
Im Debugger sieht es so aus:
Habe eine exe mit 527184 Bytes verschickt
Server:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm3.UpdateClient1Click(Sender: TObject); var Stream: TMemoryStream; Size, ID:Integer; begin if UpdateOpenDialog.Execute then begin Stream := TMemoryStream.Create; try Stream.LoadFromFile(UpdateOpenDialog.FileName);
Size := Stream.Size; Stream.WriteBuffer(Size, SizeOf(Size)); Form1.Server.SendStream(Connection, Stream); finally Stream.Free; end; end; end; |
Client:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm2.TCPClientInput(Sender: TObject; Stream: TStream; var DisposeStream: Boolean); var Str:String; Size, ID:Integer; UpdateFileStream:TFileStream; begin UpdateFileStream := TFileStream.Create(ExtractFilePath(ParamStr(0))+'update.exe',fmCreate); try Stream.Seek (SizeOf (Integer), soFromBeginning); Stream.ReadBuffer(Size, SizeOf(Size)); Stream.Size = 527184 UpdateFileStream.CopyFrom(Stream,Size); Memo1.Lines.Add('loda'); finally UpdateFileStream.Free; end; end; |
Ankommen tuen wie gesagt nur 3 Bytes.
Kann es sein das SimpleTCP da Fehlerhaft ist?
Moderiert von AXMD: Delphi-Tags hinzugefügt
Moderiert von AXMD: Doppelposting entfernt.
_________________ Delphi forever
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 15.11.07 10:04
Sieht echt so aus, oder? Ich würde einfach auf Indy umsteigen. Dann ist das Thema nämlich erledigt.
_________________ Na denn, dann. Bis dann, denn.
|
|
DeltaEx 
      
Beiträge: 110
|
Verfasst: Do 15.11.07 10:30
Hallo alzaimar,
hast du irgendwo ein Beispiel wie ich mit Indy 10 eine Datei ... bzw. einen Stream verschicken kann? der für mein Fall passt, das der Server einem Client eine Datei schickt?
Danke
_________________ Delphi forever
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 15.11.07 10:58
Normalerweise läuft es so:
Client schickt an Server 'Gib mir mal die Datei'
Server schickt dann die Datei an den Client innerhalb der Verbindung.
Oder:
Der CLIENT schickt an den Server die Datei unaufgefordert.
Mit anderen Worten: Der Server reagiert auf Anfragen des Clients. Er bedient ('serves') also den Client, daher der Name.
Beispiele gibt es in den Demos zuhauf.
Du kannst z.B. im OnExecute-Ereignis des Servers eine Datei an den Client zurückschicken.
Beispiel: Client schickt nur einen Dateinamen zum Server und der Server schickt dann die Datei zurück:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| Procedure TfmMain.TCPServerExecute(AThread: TIdPeerThread); Var sFilename: String;
Begin sFilename := AThread.Connection.ReadLn; AThread.Connection.WriteFile(sFilename); End; |
Aber versuchs einfach selbst. Die Handhabung ist wirklich denkbar einfach, das hab sogar ich kapiert.
_________________ Na denn, dann. Bis dann, denn.
|
|