Datei übertragen über Sockets

Fredyy

Grünschnabel
hi,
ich will datein über sockets übertragen wie geht das?
wenn dann z.B der Befehl 'datei' kommt soll der server erkenne,
dass jetzt ne datei kommt und die dann auch richtig speichern.
ist das möglich?
wenn es geht dann schon mal danke für eure hilfe.
bye fredyy
PS: ich arbeite seid ca. 1 Monat mit delphi und seit ca. 1Woche mit sockets.
 
Tut mir leid, ich hab seit langer Zeit keine Sockets mehr unter Delphi programmiert, kenne den genauen Syntaxlaut nicht mehr, aber hab sowas schon öfter gemacht und kann dir sagen wie es bei mir funktioniert hat:
Client und Server haben eine Verbindung.... das heisst, du weisst wie man einen ServerSockel auf einem Port öffnet ('listen' setzt), den Client dran connected und sendet...jetzt machst du interne "Steuercodes" aus, wie du das ja mit 'datei' schon erwähnt hast,... nimm am besten einfach ein eine festgelegte Stellenzahl, das ist am einfachsten zu parsen. Dann bastel dein Protokoll wie folgt:
Beispiel: Client sendet 'datei'
Server weiss, dass jetzt eine Datei kommen soll und öffnet einen neuen sockel auf Port XYZ. Am besten wäre es, wenn du schon so fit bist diesen ServerSockel komplett zur Laufzeit zu createn, aber zur Not geht es auch, wenn du erst mal einen zweiten Sockel zur Dateiannahme per IDE einfügst und bereithälst...
Der Server sendet jetzt "readyXYZ" an den client. Der weiss jetzt, dass auf Port XYZ der Server auf die reinen Nutzdaten/Binärdaten was auch immer wartet... verbindet sich und spielt den Kram hoch... der Server liest einfach fleissig alles aus in einen Puffer oder sonstwo hin...
Sobald der Client fertig ist sendet er auf der ursprünglichen Verbindung "dataend"... so weiss der Server, dass die Datenübertragung fertig ist und kann den Sockel schließen...

Vorteil dieser Programmierung ist, dass du dir keine Gedanken um die Länge des Uploads machen musst und der Hauptverbindungkanal nicht während der ganzen Zeit belegt ist....

Alternative (find ich nicht so gut):
Sag dem Server "databegin(xyz)" wobei xyz für die nun folgenden bytes steht, daraufhin sendet der server ein 'ok' und nimmt jetzt binär an.. also sozusagen auf einer Leitung zwischen Steuercodes und Nutzdateninterpretation hin und her schalten.... nach ablauf der gelesenen bytes schaltet der Server wieder auf Steuercodes um...
Aber wenn du mich fragst... verfolge die erste Alternative... insbesondere wenn du die Sockets und Eventhandler zur Laufzeit zusammenbaust kannst du so parallele uploads etc... realisieren...

hoffe das hilft dir weiter :)
-Andy
 

Neue Beiträge

Zurück