Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi wie versende ich mit tclient/serversocket eine datei? (https://www.delphipraxis.net/76747-wie-versende-ich-mit-tclient-serversocket-eine-datei.html)

gandime 9. Sep 2006 00:00


wie versende ich mit tclient/serversocket eine datei?
 
hi,
ich wollte fragen wie ich mit tserversocket und mit tclientsocket eine datei verschicke?

mfg gandime

flossinger 9. Sep 2006 00:40

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

kommt darauf an.

Beispielsweise mit .sendstream .

der flossinger

gandime 9. Sep 2006 09:24

Re: wie versende ich mit tclient/serversocket eine datei?
 
ja soweit bin ich auch schon aber wie emfange ich das dann?

edit:
mein bisheriger versuch

clinet:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  FStream: TFileStream;
begin
  ClientSocket1.Active:=true;
  ClientSocket1.Socket.Connect(5000);
  FStream := TFileStream.Create('C:\la.avi', fmOpenRead or fmShareDenyWrite);
  ClientSocket1.Socket.Write(FStream.Size);
  ClientSocket1.Socket.SendStream(FStream);
  ClientSocket1.Socket.Disconnect(5000);
  ClientSocket1.Active:=false;
  freeandnil(fstream);
end;

server:
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  FStream:tfilestream;
  i_size:integer;
begin
  FStream := TFileStream.Create('C:\ka.avi', fmCreate or fmShareExclusive);
  Socket.Read(i_size);
  Socket.ReceiveBuf(fstream,i_size);
  freeandnil(fstream);
end;

flossinger 9. Sep 2006 10:58

Re: wie versende ich mit tclient/serversocket eine datei?
 
Du hast da ein paar falsche Annahmen über das Funktionieren der Sockets. Ist kein Wunder, sie sind schlecht dokumentiert. Sei froh, sie funktionieren viieel einfacher, als du glaubst.

Ein kleines Demobeispiel, das grundlegende Funktionen zeigt:
Delphi-Quellcode:
procedure log(text:string);
begin
form1.memo1.lines.add(text);
end;

procedure TForm1.Button1Click(Sender: TObject);
var stream1:tfilestream;filename:string;
begin
filename:= 'C:\irgendeinPfad\test.txt';
stream1:=tfilestream.Create(filename,fmOpenRead or fmShareExclusive);
serversocket1.Socket.connections[0].SendStream(stream1);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
log(socket.receivetext);
end;
Wenn empfangen wird, wird das read ereignis ausgelöst. Zum Zeitpunkt connect Ereignis kannst du noch nichts auswerten. Connect sagt nur, dass die Verbindung steht, nicht das Daten da sind.

grüsse,
der flossinger

gandime 9. Sep 2006 12:41

Re: wie versende ich mit tclient/serversocket eine datei?
 
ich verstehe ich ganz wie das funktionieren soll

client:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientSocket1.Active:=true;
  ClientSocket1.Socket.Connect(5000);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
  FStream := TFileStream.Create('C:\ka.mdf', fmCreate or fmShareExclusive);
  i_size:=strtoint(socket.ReceiveText);
  socket.ReceiveBuf(fstream,i_size);
end;
server:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  FStream := TFileStream.Create('X:\bluetooth.mdf', fmOpenRead or fmShareDenyWrite);
  serversocket1.Socket.connections[0].SendText(inttostr(fstream.Size));
  serversocket1.Socket.connections[0].SendStream(fstream);
end;
blos wo is da der fehler?

flossinger 9. Sep 2006 13:22

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

Zitat von gandime
ich verstehe ich ganz wie das funktionieren soll
blos wo is da der fehler?

ja von welchem Fehler sprichst du denn? Vielleicht machst du dir mal die Mühe Fehlermeldungen zu lesen und bei deinen Hilferufen wörtlich zu posten.

Was soll .connect(5000) bewirken? ist unverständlich.

Fehler:

.receivebuf verlangt als 1. Parameter einen bufferpointer, keinen stream.

Wenn du mit .sendtext was sendest, heisst das noch lange nicht, das bei on read nur dieser Inhalt empfangen wird.
Wenn du mit sendstream was sendest, heisst das nicht, das nur der Stream bei onread empfangen wird, oder dass der in einem Paket empfangen wird.

Bei einem read ereignis können mehrere getrennt gesendete Inhalte aneinander kleben. Ein Stream kann in Teilen mit mehreren read Ereignissen ankommen.

Dein Projekt scheint zwei Nummern zu gross für dich zu sein. Man muss bei einem Projekt zumindest so weit sein, dass man konkrete sinnvolle Fragen stellen kann, sonst kann einem keiner helfen. Und man sollte in der Lage sein Anbtworten zu lesen und den Code aus Antworten zu testen und zu modifizieren.

der flossinger

Muetze1 9. Sep 2006 13:44

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

Zitat von flossinger
Delphi-Quellcode:
procedure log(text:string);
begin
form1.memo1.lines.add(text);
end;

Für einen Anfänger ein mehr als schlechtes Beispiel: Nutze niemals eine Instanzenvariable direkt für den Zugriff auf Elemente der Klasse. Wenn, schreibe eine Methode und lass bloss die Instanzenvariable aus dem Spiel!

@Threadersteller:
http://www.delphipraxis.net/internal...ct.php?t=81128
http://www.delphipraxis.net/internal...ct.php?t=53882

gandime 9. Sep 2006 14:14

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

Zitat:

Zitat von flossinger
Was soll .connect(5000) bewirken? ist unverständlich.

ich kenne leider den tserversocken und clientsocket nicht so besonders gut und deshalb wusste ich nicht, dass wenn der client aktiviert wird, dass er sofort connectet.

Zitat:

Zitat von flossinger
.receivebuf verlangt als 1. Parameter einen bufferpointer, keinen stream.

ja tut mir leid habe ich nicht dran gedacht

Zitat:

Zitat von flossinger
Dein Projekt scheint zwei Nummern zu gross für dich zu sein. Man muss bei einem Projekt zumindest so weit sein, dass man konkrete sinnvolle Fragen stellen kann, sonst kann einem keiner helfen. Und man sollte in der Lage sein Anbtworten zu lesen und den Code aus Antworten zu testen und zu modifizieren.

also dazu
nein das projekt ist ganz bestimmt keine 2 nummern zu groß für mich!

ich versuche ja immer konkrete fragen zu stellen aber wenn ich noch absolut ka habe wie das mit dem socket modul geht ist das meinermeinung nach schlecht

flossinger 9. Sep 2006 14:17

Re: wie versende ich mit tclient/serversocket eine datei?
 
ja fein,
dann läuft ja alles bestens

der flossinge

flossinger 9. Sep 2006 14:26

Re: wie versende ich mit tclient/serversocket eine datei?
 
@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


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 Uhr.
Seite 1 von 4  1 23     Letzte »    

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