Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Simultan 2 Streams empfangen (https://www.delphipraxis.net/103433-simultan-2-streams-empfangen.html)

0x802b 15. Nov 2007 16:49


Simultan 2 Streams empfangen
 
Hey Leute :)

Ich hab mal wieder eine Frage..und zwar gehts ums "auseinander" halten mehrerer Streams.
Um das besser zu Erläutern greife ich mal auf ein Beispiel zurück;)

Client verbindet zu Server
Client requested 2 Dateien vom Server

Der Server schickt nun eine Art "Erkennungswort" + die Dateigröße A
Der Client erkennt das "Erkennungswort" und weiß, dass er nen Buffer mit der Dategröße A aufzusetzen hat, um den Stream erfolgreich verarbeiten zu können :)
Soweit klar?

So...damit die darauf folgenden Daten aber auch wirklich im Buffer landen, setze ich eine Art "Empfangsmodus" für das einzelne Socket, wenn die gefüllte Buffergröße dann = der Dateigröße A ist, kann er den "Empfangsmodus" wieder zurücksetzen und der Transfer ist abgeschlossen.

Nun würde ja eigentlich Datei B kommen, aber ich möchte halt, dass beide GLEICHZEITIG ankommen.

Bei meiner Methode ist halt das Problem gegeben, dass wenn der Client einen 2ten Stream eröffnet die Streams nicht mehr auseinander gehalten werden können..Zumindest glaube ich das ;)

Versteht ihr was ich meine? Ich möchte den Clienten TROTZ eingehendem Transfer noch für neue Aktionen(zb. Transfer einer 2ten Datei) offen lassen...

Vllt. könnt ihr mir dabei helfen

Mit freundlichen Grüßen
0x802b

OregonGhost 15. Nov 2007 17:17

Re: Simultan 2 Streams empfangen
 
Solange du unterschiedliche Sockets verwendest, kannst du ganz ohne Probleme (fast) beliebig viele Daten gleichzeitig empfangen und diese problemlos auseinander halten.

0x802b 15. Nov 2007 17:19

Re: Simultan 2 Streams empfangen
 
Klar...wie du sagtest..solange ich verschiedenen Sockets verwende^^
Die Daten kommen aber auf dem selben Socket an :>

Edit: Oder wäre es sinnvoll ein neues Socket zu verwenden extra für jede Datei? Ich möchte keinen 2ten Port verwenden um die Daten zu senden ;)

wicht 15. Nov 2007 17:58

Re: Simultan 2 Streams empfangen
 
Dafür brauchst du nur einen Port. Vom Server her jedenfalls.

gsh 15. Nov 2007 18:46

Re: Simultan 2 Streams empfangen
 
ja einfach zwei verbindungen zum server aufbauen

Client A ladet datei A
Client B ladet datei B

OregonGhost 15. Nov 2007 18:47

Re: Simultan 2 Streams empfangen
 
Soweit es TCP/IP betrifft, ist ein Socket in erster Näherung eine einzelne TCP/IP-Verbindung. Brauchst du zwei Verbindungen, nimmst du dir einfach zwei Sockets. Ansonsten ist es nicht übermäßig sinnvoll, mehrere Dateien gleichzeitig zu versenden über dieselbe Verbindung. Dann kannst du sie auch nacheinander senden, das ist einfacher.

alzaimar 15. Nov 2007 19:00

Re: Simultan 2 Streams empfangen
 
Zitat:

Zitat von gsh
Client A ladet datei A

:wall: [OT] ... lädt ... [/OT] Das musste sein, Tschuldigung.

gsh 15. Nov 2007 19:03

Re: Simultan 2 Streams empfangen
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von gsh
Client A ladet datei A

:wall: [OT] ... lädt ... [/OT] Das musste sein, Tschuldigung.

[OT]
was?
man kann auch ladet sagen
bzw:
Client A ladet die datei A[/OT]

OregonGhost 15. Nov 2007 19:08

Re: Simultan 2 Streams empfangen
 
[ot, jetzt kann ich mich auch nicht mehr halten :p]
Ladet kannst du als Imperativ benutzen ("Ladet die Datei herunter!"), aber man lädt eine Datei herunter. In deiner Verwendung wird es nur poetisch benutzt.
[/ot]

0x802b 15. Nov 2007 19:53

Re: Simultan 2 Streams empfangen
 
:D oh man^^

Ehm...ist es denn zu empfehlen mehrere Sockets zu benutzen?
Wie ist das mit der Firewall...muss ich da jedesmal wieder neuen Zugriff erlauben?


Danke schonmal für eure Hilfe :-*

gsh 15. Nov 2007 21:07

Re: Simultan 2 Streams empfangen
 
Zitat:

Zitat von 0x802b
Ehm...ist es denn zu empfehlen mehrere Sockets zu benutzen?

imho ja

Zitat:

Zitat von 0x802b
Wie ist das mit der Firewall...muss ich da jedesmal wieder neuen Zugriff erlauben?

nein im normallfall nur einmal außer er hat ne ganze komische einstellung

sirius 15. Nov 2007 21:43

Re: Simultan 2 Streams empfangen
 
Also der Server sendet auf dem gleichen Socket abwechselnd Datei A und dann Datei B? Hab ich das richtig verstanden? Also, wer macht denn sowas?
du musst ja eh einen Header zu deinen Paketen schnüren. Dann liefer doch neben der Stream-Position auch eine DateiID.

btw: Du kannst auch mehrere Sockets auf einen Port legen. Sie dürfen dann nur nicht dieselbe Remote-Adresse haben.

0x802b 16. Nov 2007 13:15

Re: Simultan 2 Streams empfangen
 
Wie meinsten das jetzt?
Nicht die selbe Remote Address...
Das ist doch eigentlich vorrausgesetzt wenn der Client mehrere Sockets zum Server aufbauen würde.
Die Remote Adresse wären dann ja auch zwangsweise gleich.

Der_Unwissende 16. Nov 2007 13:21

Re: Simultan 2 Streams empfangen
 
Zitat:

Zitat von 0x802b
Die Remote Adresse wären dann ja auch zwangsweise gleich.

Wieso sollte das der Fall sein? Stell Dir einfach mal vor, dass Dein Rechner mehr als eine Netzwerkkarte hätte (ja, solche Rechner gibt's). Das ermöglicht Dir die Verwendung von mindestens zwei verschiedenen Adressen. Aber auch bei einer Karte gibt es schon mehr als eine Remoteadresse, so hört z.B. die Karte auf der Loopback-Adresse ebenso wie unter vergebenen IP mit. Dazu kannst Du dann z.B. noch einen VPN-Tunnel öffnen, bekommt auch eine eigene Adresse, alles über einen Netzwerkadapter. Kommen Pakete an kann man dann immer noch nach Remoteadresse filtern.

Gruß Der Unwissende

sirius 16. Nov 2007 13:23

Re: Simultan 2 Streams empfangen
 
Zitat:

Zitat von 0x802b
Das ist doch eigentlich vorrausgesetzt wenn der Client mehrere Sockets zum Server aufbauen würde.
Die Remote Adresse wären dann ja auch zwangsweise gleich.

Die Adresse besteht aus IP und Portnummer. Es muss also entweder am Server oder am Client die Sockets auf verschiedene Portnummern gelegt werden.

Ich habe aber immer noch nicht kapiert, was genau du warum machen willst.

0x802b 16. Nov 2007 13:50

Re: Simultan 2 Streams empfangen
 
Ich glaub wir reden aneinander vorbei :(

Also.. Client X verbindet zu Server Y

Server Y schickt jetzt meinetwegen den Befehl, dass Client X eine Datei schicken soll...
Client X erzeugt den Stream, gleichzeitig soll Server Y aber auch noch in der Lage sein, weitere Befehle an Client X zu senden wie zb. einen zweiten Dateitransfer oder was auch immer(hauptsache es werden Daten ausgetauscht).
Das Problem ist ja aber, dass (wie im ersten Post ausführlich beschrieben) dies simultan passieren soll, ohne das sich die Resultate der Befehle vermischen.

Das ganze soll aber über einen einzigen Port laufen..
Nun wurde vorgeschlagen im Clienten ein neues Socket aufzusetzen und dort eine Art 2te Verbindung zum Server aufzubauen (Aber trotzdem auf dem selben Port)

@Der Unwissende
Ich will keine VPN Verbindungen aufbauen oder meine 2te Netzwerkkarte mit einbeziehen, es gibt ein Clienten Programm und ein Server Programm, welche unabhängig von der Anzahl der Netzwerkkarten laufen sollen..

sirius 16. Nov 2007 14:01

Re: Simultan 2 Streams empfangen
 
Ja, also wenn du dafür eine zweite Verbindung aufbaust, brauchst du mindestens auf einer Seite einen weiteren Port.

Aber du kannst die Daten doch genausogut über einen SocketStream schicken. Du musst doch eh einen Paketheader mitnehmen. Dann kannst du im Recieve-Ereignis deine Pakete wieder auseinanderbasteln.

shmia 16. Nov 2007 14:08

Re: Simultan 2 Streams empfangen
 
Wenn du eine TCP/IP Verbindung für mehrere Streams gleichzeitig verwenden möchtest, brauchst du ein entsprechendes Protokoll bzw. Containerformat.
Bei AVI laufen z.B. ein Video- und ein Audiostream quasi parallel.
Auch das OGG Format wäre ein guter Startpunkt.

Zacherl 16. Nov 2007 23:26

Re: Simultan 2 Streams empfangen
 
Folgendes Szenario: Du hast eine Verbindung zum Server hergestellt und hast eine aktive Verbindung (Control Socket). Jetzt möchtest du 2 Dateien vom Client zum Server schicken. Du generierst dir eine eindeutige ID, die du an den Server schickst mit zusätzlichen Infos zur Datei (Pfad, etc). Jetzt stellst du mit einem 2. Socket eine Vrebindung zum selben Server auf dem selben Port her und sendest die UID. Der Server identifiziert das Socket mit dem Transfer; der Client fängt an die Datei zu schicken. Dieser Prozess kann parallel ablaufen, da der Server jeweils ein anderes Socket für die Transfers verwendet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 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