Entwickler-Ecke

Internet / Netzwerk - Dateien Versenden über TServer und Client Socket?


pyr0t0n - Sa 13.05.06 18:14
Titel: Dateien Versenden über TServer und Client Socket?
Hallo,

Also ich würde gerne dateien über die TServerSocket an den TClientSocket senden. Ich weis es gibt indy usw. Da ich aber einen Router habe und den Server spiele weil ich zu dem anderen keine Direct Connection aufbauen kann benutze ich halt diese sog. Reverse Connection. Deswegen funzt das mit dem Indy FTP auch net weil ich halt keine Dateien von dem Server an den Clienten senden kann.

Nun ich habe irgendwo schonmal gelesen das sowas möglich ist. Nun meine Frage. WIE? ^^

Hoffe ihr könnt mir helfen. Danke schonmal

Mfg
Pyr0t0n


Green - Sa 13.05.06 19:06

naja, dabei gehts halt letztendlich ums protokoll... das heisst du musst dem Client klarmachen das ja ne datei kommt. dann kannste deine datei aufspalten, also komplett mit header und so, stück für stück als strings übergeben, und am anderen ende wieder ne datei druss machen... is aber recht kompliziert. besonders mit dem header und so

mfG Green


Narses - Sa 13.05.06 19:47

Moin!

user profile iconpyr0t0n hat folgendes geschrieben:
Ich weis es gibt indy usw. Da ich aber einen Router habe und den Server spiele weil ich zu dem anderen keine Direct Connection aufbauen kann benutze ich halt diese sog. Reverse Connection. Deswegen funzt das mit dem Indy FTP auch net weil ich halt keine Dateien von dem Server an den Clienten senden kann.

Dann hast du deinen Router nicht korrekt konfiguriert; das wird dann mit den Sockets vermutlich auch nicht korrekt funktionieren, die haben nur eine andere API, aber setzen genauso auf der WSA auf... :|

cu
Narses


pyr0t0n - Sa 13.05.06 20:06

nein mom ich hab einen router kann die ports für meien server aber freischalten. der anderen mit dem ihc das benutzen will hat einen kann aber dort keine ports freischalten deswegen erhält er den client und connected zu meinem rechner und dann kann ich ihm textnachrichten zukommen lassen also sollte das auch mit dateien gehen.


Narses - Sa 13.05.06 21:03

Moin!

OK, dann halt so rum formuliert: wenn´s mit den Indies nicht klappt, geht´s auch mit den Sockets nicht. :|

cu
Narses

//EDIT: Tiepvehler korrigiert ;)


Green - So 14.05.06 00:09

naja, aber wenn text geht dann kann ers doch nach meiner methode machen ;)

€:
der easy Delhpi Helper sagt foldendes:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
function FileToString(const AFilename: String; StartPos: Integer=0; EndPos: Integer=0): String;
var
FileStream : TFileStream;
wlCount: Integer;
begin
if FileExists(AFilename) then
begin
 if StartPos<0 then StartPos:=0;

 FileStream := TFileStream.Create(AFilename, fmOpenRead or fmShareDenyWrite);
 try
   if (EndPos <= StartPos) or (EndPos>FileStream.Size) then
     EndPos := FileStream.Size;
   wlCount := EndPos - StartPos;
   if FileStream.Size > StartPos then
   begin
     SetLength(Result, wlCount);
     FileStream.Seek(StartPos, soFromBeginning);
     FileStream.Read(Result[1], wlCount);
   end;
 finally
   FileStream.Free;
 end;
end
else
 Result := '';
end;

damit kann ich eine datei in einen String laden...
nun sollte es auch nicht mehr so schwer sein daraus eine funktion zu machen die genau das gegenteil macht, dann hätteste es ja

mfG Green


ghost007 - So 14.05.06 02:07

Hi,
bei den schweizern gibts da 'n tutorial

http://www.swissdelphicenter.ch/de/showcode.php?id=1072

Hoffe es hilft dir weiter.

MfG - Ghost


Narses - Di 19.06.07 19:56

Moin!

user profile iconghost007 hat folgendes geschrieben:
bei den schweizern gibts da 'n tutorial
http://www.swissdelphicenter.ch/de/showcode.php?id=1072

Von dem gelinkten Code kann ich nur dringend abraten, der hat ganz klare Fehlfunktionen! :shock: :mahn: Hintergründe sind hier [http://www.delphi-library.de/topic_Warum+gibt+es+kein+ReceiveStream+bei+den+Sockets_65367.html] und hier [http://www.delphi-library.de/topic_Datenpakete+bei+den+SocketKomponenten+auseinanderhalten_56194.html] nachzulesen. :les:

Hier gibt es ein Tutorial [http://www.delphi-library.de/topic_BinaerProtokollTutorial+Sockets+v100+MalChatFiles_66706.html], das zeigt, wie man einen Dateitransfer korrekt über die Sockets abwickeln könnte. ;)

cu
Narses