AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi tclientsocketnach der dateiübertagung keine freigabe der da
Thema durchsuchen
Ansicht
Themen-Optionen

tclientsocketnach der dateiübertagung keine freigabe der da

Ein Thema von gandime · begonnen am 4. Jan 2007 · letzter Beitrag vom 6. Jan 2007
Antwort Antwort
gandime
(Gast)

n/a Beiträge
 
#1

tclientsocketnach der dateiübertagung keine freigabe der da

  Alt 4. Jan 2007, 22:34
hi,
ich verschicke mit dem tserversocket eine datei zum tclientsocket, der dann die datei normalerweise freigeben sollte was er aber nicht tut:

cs_up_up_manager:tclientsocket;

Delphi-Quellcode:
procedure TForm1.ti_up_dl_managerTimer(Sender: TObject);
var
  i_temp,i_temp2:integer;
begin
  if assigned(fstream) then
  begin
    if (i_file_size<=fstream.Position) then
    begin
      cs_up_up_manager.Active:=false;
      if not assigned(fstream) then
      begin
        ti_up_dl_manager.Enabled:=false;
      end;
    end;
  end;
end;
der timer überprüft ob die größe der datei erreicht ist und wenn ja dann wird die verbindung getrennt:

Delphi-Quellcode:
procedure TForm1.cs_up_up_managerDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  fstream:=nil;
  fstream.free;
end;
damit müsste der fstream ja freigegeben sein (die ereignisse sind ausgelöst worden vom disconnect) aber ich wenn ich die datei dann öffnen möchte sagt er mir, dass sie von einem anderen prozess verwendet wird. wenn ich das programm dann aus mache kann ich die datei öffnen
warum?
  Mit Zitat antworten Zitat
Skullschildi

Registriert seit: 7. Jan 2006
94 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: tclientsocketnach der dateiübertagung keine freigabe der

  Alt 4. Jan 2007, 22:47
versuch mal statt fstream:= nil; und fstream.free folgendes:freeandnil(fstream);
Ehe man über den Berg kommt, soll man nicht Juchhe schreien.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: tclientsocketnach der dateiübertagung keine freigabe der

  Alt 5. Jan 2007, 12:04
Zitat von Skullschildi:
versuch mal statt fstream:= nil; und fstream.free folgendes:freeandnil(fstream);
Und was ändert das an seinem Problem? Es ist genau der gleiche Code wie er ihn schon hat, nur halt mit Aufruf...

@gandime: Wie versendest du die Datei? Per SendStream? Wenn ja, dann wird die Instanz freigegeben (wie in der Hilfe angegeben), aber der Socket setzt dir die Instanzenadresse nirgendwo auf Nil. Das kann er auch gar nicht, da er nicht alle möglichen Plätze und Variablen kennt, welche sich auf den Stream beziehen um sie mit Nil zu füllen.

Wenn du die Verbindungen direkt nach dem Versand schließen möchtest, dann sende die Datei selber (also Blockweise dem Socket übergeben) und dann weisst du ja, wann du fertig bist und kannst entsprechend reagieren.
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#4

Re: tclientsocketnach der dateiübertagung keine freigabe der

  Alt 6. Jan 2007, 03:25
iwie verstehe ich das nicht so ganz wie das gehen soll
erstmal ja ich verschicke die datei via sendstream und wie soll das dann genau gehen, dass die datei freigegeben wird?

auserdem wenn ich freeandnil(fstream) mache kommt des öfteren eine fehlermeldung!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: tclientsocketnach der dateiübertagung keine freigabe der

  Alt 6. Jan 2007, 10:08
@Mütze: Der unterschied ist das der Stream erst frei gegeben wird und dann erst auf nil gesetzt wird. Im Ausgangspost wird die Instanzvariable aber erst auf nil gesetzt und dann die Methode Free aufgerufen. Da der Instanzzeiger dann aber nicht mehr auf den reservierten Speicher zeigt wird nichts frei gegeben und es ensteht ein Memoryleck.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#6

Re: tclientsocketnach der dateiübertagung keine freigabe der

  Alt 6. Jan 2007, 15:21
@SirThornberry

hey danke so gehts


und den anderen natürlich auch
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: tclientsocketnach der dateiübertagung keine freigabe der

  Alt 6. Jan 2007, 17:25
@SirThomberry: sorry, habe das übersehen, stimmt. Ich nehme alles darauf bezugnehmend zurück.

@gandime: Das ist Stuss - sorry wenn ich das so sage. Ich habe dir schon oben geschrieben, dass SendStream die Instanz übernimmt und selber freigibt, wenn er die Datei gesendet hat. Er sendet die Datei asynchron im Hintergrund und daher weisst du nie, wann er fertig ist. Wenn du ihm die Dateinstanz freigibst, dann greift er beim einlesen von Daten (da er vllt. noch beim Senden ist), ins Nirvana und bekommen eine Fehlermeldung. Ich habe dir schon oben geschrieben, dass du die Instanz nicht freigeben sollst. Genauso ist es in der Hilfe eindeutig geschrieben.

Ich weiss nicht was man noch schreiben soll. Schau in die Hilfe, folge vllt. meinen Vorschlägen von oben, aber bitte beschwere dich nicht, dass es bei grösseren Dateien komischerweise wieder zu komischen Zugriffsverletzungen kommt oder kaputte Dateien ankommen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:30 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