AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi wie versende ich mit tclient/serversocket eine datei?
Thema durchsuchen
Ansicht
Themen-Optionen

wie versende ich mit tclient/serversocket eine datei?

Ein Thema von gandime · begonnen am 9. Sep 2006 · letzter Beitrag vom 11. Feb 2007
Antwort Antwort
Seite 2 von 4     12 34      
gandime
(Gast)

n/a Beiträge
 
#11

Re: wie versende ich mit tclient/serversocket eine datei?

  Alt 9. Sep 2006, 16:07
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:
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;
server:
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;
  Mit Zitat antworten Zitat
flossinger

Registriert seit: 22. Aug 2005
Ort: südlich der Alpen
109 Beiträge
 
Delphi 5 Standard
 
#12

Re: wie versende ich mit tclient/serversocket eine datei?

  Alt 9. Sep 2006, 16:32
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
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#13

Re: wie versende ich mit tclient/serversocket eine datei?

  Alt 9. Sep 2006, 17:01
so das problem is:
ich bekomme keine fehlermeldung und die datei wird nur zum teil übertragen
  Mit Zitat antworten Zitat
flossinger

Registriert seit: 22. Aug 2005
Ort: südlich der Alpen
109 Beiträge
 
Delphi 5 Standard
 
#14

Re: wie versende ich mit tclient/serversocket eine datei?

  Alt 9. Sep 2006, 17:16
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: wie versende ich mit tclient/serversocket eine datei?

  Alt 9. Sep 2006, 19:25
Zitat von flossinger:
@koos

es ist ja wunderbar, wie du solche Grundsätze herunterbeten kannst. Aber ein paar Demozeilen, in denen es um etwas anderes geht, so klugscheisserisch zu kritisieren, das entbehrt nicht eines etwas skurilen charmes. Aber gratuliere, dass du eine anscheinend dringend benötigte Glegenheit gefunden hast, dein ach so grosses Wissen zu verbreiten.

smiling, der flossinger
Ich habe einen Nick und man muss nicht unbedingt einem mit dem Nachnamen ansprechen. Und ich weiss nicht warum ich ein Beispiel geben sollte wie eine Methode aussieht. Ich habe geschrieben wie man das angesprochene Makel leicht beheben kann und du willst wirklich das ich als Beispiel Codezeilen dazu liefere? Also wenn dir nicht bewusst ist was der Unterschied zwischen Methoden und Proceduren ist, dann glaube ich auch nicht, dass dir die Codezeilen helfen werden. Aber bitte, hier hast du sie:

Delphi-Quellcode:
procedure TForm1.log(text:string);
begin
  memo1.lines.add(text);
end;
Und, hilft's?

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.
  Mit Zitat antworten Zitat
flossinger

Registriert seit: 22. Aug 2005
Ort: südlich der Alpen
109 Beiträge
 
Delphi 5 Standard
 
#16

Re: wie versende ich mit tclient/serversocket eine datei?

  Alt 9. Sep 2006, 20:06
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: wie versende ich mit tclient/serversocket eine datei?

  Alt 9. Sep 2006, 20:20
Hach, Bergsmann,

Zitat von flossinger:
durch Wiederholungen wird das schon gesagte weder wichtiger noch relevanter für den Ursprungsposter. Auch wenns die Amsel nocht so oft singt.
Ich habe Ihren Code kritisiert und es betrifft Sie und war für Sie gedacht und nicht für den Ursprungsposter. Aber solche Sachen werden erfolgreich von Ihnen ignoriert. Gratulation - aber immerhin konsequent.

Zitat von flossinger:
Bei so viel Wiederholungen ihrerseits, kommt der Verdacht auf, dass sie die threads, in denen sie posten, nicht lesen.
Hmm, wie komme ich nur auf fehlerhafte Stellen im Code welche die wage beschriebenen Dinge verursachen können (fmCreate)? Naja, war mir wohl im Traum eingefallen, da ich den Thread ja nicht lese. Aber kein Problem, ich werde nichts mehr von mir geben, Sie haben ja alles im Griff - mit den geheimnisvollen Dingen aus einem Nicht-Lehrbuch.

Zitat von flossinger:
Wunderbar - alles so frisch aus dem Lehrbuch.
Keine Ahnung, in Sachen Programmierung habe ich mir noch nie eins angeschaut. Könnte sehr gut sein, aber da vertraue ich Ihnen mal und fühle mich voller Stolz, dass ich es genauso sehe wie grosse Lehrbuch-Autoren.

Neidvoll sich vor Ihren pädagogischen Wissen beugend,
Muetze1
  Mit Zitat antworten Zitat
flossinger

Registriert seit: 22. Aug 2005
Ort: südlich der Alpen
109 Beiträge
 
Delphi 5 Standard
 
#18

Re: wie versende ich mit tclient/serversocket eine datei?

  Alt 9. Sep 2006, 20:32
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
  Mit Zitat antworten Zitat
flossinger

Registriert seit: 22. Aug 2005
Ort: südlich der Alpen
109 Beiträge
 
Delphi 5 Standard
 
#19

Re: wie versende ich mit tclient/serversocket eine datei?

  Alt 10. Sep 2006, 07:42
@ 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
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#20

Re: wie versende ich mit tclient/serversocket eine datei?

  Alt 10. Sep 2006, 17:15
joa da is dann das prob wie zerteile und setzte ich die datei?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz