![]() |
Re: wie versende ich mit tclient/serversocket eine datei?
so und jetzt habe ich mich malwieder etwas damit bescheftig und ich hoffe das es jetzt etwas besser is als vorher, aber es geht immer noch nicht so wie ich es will
client:
Delphi-Quellcode:
server:
procedure TForm1.Button1Click(Sender: TObject);
var buffer:pointer; begin FStream := TFileStream.Create('X:\bluetooth.mdf', fmOpenRead or fmShareDenyWrite); buffer := AllocMem(fStream.Size); FStream.Read(buffer^,FStream.Size); ClientSocket1.Socket.SendBuf(buffer^,FStream.Size); FreeMem(buffer); FreeAndNil(fstream); end;
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket); var buffer:pointer; len:integer; begin len := Socket.ReceiveLength; FStream:=tfilestream.Create('c:\ka.mdf',fmcreate); FStream.Seek(0,soFromEnd); buffer := AllocMem(len); socket.receivebuf(buffer^,len); FStream.Write(buffer^,len); FreeMem(buffer); freeandnil(FStream); end; |
Re: wie versende ich mit tclient/serversocket eine datei?
in welcher Zeile tritt der Fehler auf, und wie heisst die Fehlermeldung? Oder was ist das falsche Ergebnis genau?
poste konkrete und vollständige Fehlermeldungen und keine allgemeinen Klagen. der flossinger |
Re: wie versende ich mit tclient/serversocket eine datei?
so das problem is:
ich bekomme keine fehlermeldung und die datei wird nur zum teil übertragen |
Re: wie versende ich mit tclient/serversocket eine datei?
na endlich, juhuuuu,
er gibt information von sich. Vielleicht gehts etwas genauer: Wieviele bytes werden gesendet, wieviele werden on read empfangen, in wieviel durchgängen und wieviele werden im File gespeichert. Enthält dein File den Anfang oder das Ende des gesendeten Streams? Du bist hier im Thread schon darauf hingewiesen worden, dass ein Stream in Stücken mit mehreren read ereignissen ankommen kann. Wo triffst du Vorsorge dafür? Vielleicht ist es sinnvoll, die bisherigen Hinweise genau und vollständig durch zu lesen. Anderes, zukünftiges Problem: Was passiert, wenn der File sehr gross ist und du erzwingst auf der Sendeseite eine Puffergrösse in Grösse der Filelänge. Puffer werden verwendet, um genau das zu vermeiden. .sendstream handelt den Puffer ohnehin sebsttätig. der flossinger |
Re: wie versende ich mit tclient/serversocket eine datei?
Zitat:
Delphi-Quellcode:
Und, hilft's?
procedure TForm1.log(text:string);
begin memo1.lines.add(text); end; Obwohl ich nicht glaube das es beachtet wird, aber trotzdem noch ein paar Dinge (und nein, ohne Code - wenn man es selber macht, versteht man es besser...) 1. Einen TFileStream mit fmCreate im Konstruktor überschreibt auch vorhandene Dateien, also müsste unterschieden werden ob die Datei schon vorhanden ist oder nicht und entsprechend andere Parameter übergeben werden. 2. SendStream() beim senden war doch recht einfach und hat die Sache genauso gut erledigt. Du merkst ja vielleicht selber, dass der neue Weg über einen Buffer umständlicher ist als nötig (zumindest beim senden) 3. Wenn die Datei grösser ist, dann hast du beim Empfangen (sowie zZ noch beim Senden) ein Problem, da du soviel Speicher alloziierst. Besser wäre hier eine feste Puffergrösse und entsprechend immer Blockweise einlesen und senden bis alle Daten empfangen/gesendet wurden. |
Re: wie versende ich mit tclient/serversocket eine datei?
aber koos,
durch Wiederholungen wird das schon gesagte weder wichtiger noch relevanter für den Ursprungsposter. Auch wenns die Amsel nocht so oft singt. Bei so viel Wiederholungen ihrerseits, kommt der Verdacht auf, dass sie die threads, in denen sie posten, nicht lesen. Nichtsdetoweniger ist ihnen die Bewunderung für ihre Weisheit sicher. Wunderbar - alles so frisch aus dem Lehrbuch. hochachtungsvoll, der flossinger |
Re: wie versende ich mit tclient/serversocket eine datei?
Hach, Bergsmann,
Zitat:
Zitat:
Zitat:
Neidvoll sich vor Ihren pädagogischen Wissen beugend, Muetze1 |
Re: wie versende ich mit tclient/serversocket eine datei?
Na, wenigstens vestehenn sie Ironie und können google benützen.
In der Praxis kümmere ich mich bei einem Testbeispiel tatsächlich und absichtlich nicht um Randthemen, wenn es darum geht, sich auf das Wesentliche zu beschränken. Das können sie gern kritisieren, wenn es hilft, ihr ego aufzublasen. Es tut mitr nur leid, das bei so viel Selbstdarstellung das Ursprungsthema so stark in den Hintergrund tritt, dass der thread schon langweilig geworden ist. gähnend, der flossinger |
Re: wie versende ich mit tclient/serversocket eine datei?
@ gandime
tut mir leid, dass ich mich von deinem Hauptthema habe ablenken lassen. Du hast eine fehlerhaftes Ergebnis und weisst nicht, woran das liegt. Der beste Weg da weiter ztu kommen ist, sich an zu sehen, was GENAU geschieht. Ein Weg ist, sich zusätzlich ein memo zu Testzwecken auf das Form zu ziehen und dort jeden ereignisaufruf protokollieren zu lassen. Dazu gleich festhalten, wieviel daten verarbeitet werden und eventuell welche Daten genau. Stringlängen, Filegrössen und andere Werte sind oft zu Beginn und am Ende einer procedure interessant. So weisst du, wieviel und was gesendet wurde, wieviel und was davon ankommt, wieviel und was in den file geschrieben wurde. In weiterer Folge lernst du die Konsequenzen von Befehlen gut kennen, auch wenn dir eine gute Dokumentation fehlt. Grüsse, der Flossinger |
Re: wie versende ich mit tclient/serversocket eine datei?
joa da is dann das prob wie zerteile und setzte ich die datei?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz