INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

UDP - 1Port, n Connections



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

27.10.2014, 10:04 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2014 10:22 von NoWay.)
Beitrag #1

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
UDP - 1Port, n Connections
EDIT: Gerade habe ich erst registriert, dass ich ins falsche Unterforum gepostet habe. Kann das eventuell jemand verschieben? Das gehört vermutlich eher ins Forum Datenkommunikation.

Hallo zusammen.

Heute geht es um das Thema UDP. Bis dato habe ich noch nicht viel Erfahrung mit Datentransfers über UDP/TCP etc gesammelt und stehe nun vor einem Verständnisproblem.
Bitte korrigiert mich unbedingt, wenn ich nachfolgend etwas falsches/missverständliches schreibe!

Mein Verständnis, so far:
Wenn ich nun von einem Rechner aus mit mehreren Teilnehmern quatschen möchte, baue ich über einen Port ein UDP Socket auf. Den Port gebe ich dabei mit dem "UDP Open" VI an. Nun habe ich nach aktuellem Verständnis einen UDP Socket mit gewünschtem Port erzeugt und dazu auch gleich eine Connection ID.
Nun möchte ich Daten senden und empangen. Dazu gebe ich den UDP Write und UDP Read Elementen jeweils einen anderen (Source)Port inklusive IP Adresse mit, zB. 50001 local Receive und 51001 als local Transmit. Diese Ports sind dann für die Gegenseite automatisch die Destination Ports. Ich hoffe, dass ich das bis hierhin korrekt verstanden habe, denn nun komme ich zu meinem Verständnisproblem:

Das Problem:
Kann ich über einen UDP Socket mehrere Verbindungen laufen lassen? Als Beispiel:
1 Host, 5 Clients, alle laufen über den UDP Socket 50000 und bekommen dann jeweils andere Ports für Transmit und Receive (Client 2: 50002/51002, Client 3: 50003/51003 ... etc)
Die connection ID ist dabei immer nur der Bezug auf den jeweiligen Socket.

Oder muss für jede Verbindung ein neuer Socket erzeugt werden? Kann ich dann in diesem Fall wieder die gleichen Receive und Transmit Ports nehmen, wie beim socket zuvor?

Gruß,
NoWay
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.10.2014, 10:23 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2014 10:24 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: UDP - 1Port, n Connections
Hallo NoWay,

UDP funktioniert wie "Radio": jeder kann zuhören… (Zumindest im Broadcast-Modus, es gibt auch "direkte" Verbindungen zwische IP-Adressen.)

Wenn du also von einem Host mehreren Clients die gleichen Daten senden willst, dürfen alle Clients auf einen Port lauschen.
Wenn die Clients jeweils unterschiedliche Daten erhalten sollen, dann sollte man über jeweils eigene Host-Sendeports nachdenken.

Ich verwende nur ein festes Paar Ports (für Tx/Rx), packe aber in die Botschaft eine Kennung für Sender und Empfänger. Nun kann zwar jeder den UDP-Botschaften lauschen, darf aber die ihn betreffenden ausfiltern…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.10.2014, 10:36 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2014 10:37 von NoWay.)
Beitrag #3

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
RE: UDP - 1Port, n Connections
(27.10.2014 10:23 )GerdW schrieb:  UDP funktioniert wie "Radio": jeder kann zuhören… (Zumindest im Broadcast-Modus, es gibt auch "direkte" Verbindungen zwische IP-Adressen.)
In meinem Fall ist es äußerst ungünstig zu broadcasten. Die Teilnehmer benötigen unterschiedliche Daten und der Host benötigt die Antworten dazu.

Zitat:Wenn die Clients jeweils unterschiedliche Daten erhalten sollen, dann sollte man über jeweils eigene Host-Sendeports nachdenken.
Das ist das, was ich mit dem Beispiel hier meinte:
Zitat:1 Host, 5 Clients, alle laufen über den UDP Socket 50000 und bekommen dann jeweils andere Ports für Transmit und Receive (Client 2: 50002/51002, Client 3: 50003/51003 ... etc)
die Frage bleibt dennoch im Raum stehen, ob das über den gleichen Socket laufen kann oder ich jeweils einen weiteren brauche.
Edit: Oder meintest du mit Host-Sende Ports die UDP Socket(port)s?

Zitat:Ich verwende nur ein festes Paar Ports (für Tx/Rx), packe aber in die Botschaft eine Kennung für Sender und Empfänger. Nun kann zwar jeder den UDP-Botschaften lauschen, darf aber die ihn betreffenden ausfiltern…
Das heißt, du erzeugst einen Socket und broadcastest darüber?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.10.2014, 10:50
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: UDP - 1Port, n Connections
Hallo NoWay,

Zitat:die Frage bleibt dennoch im Raum stehen, ob das über den gleichen Socket laufen kann oder ich jeweils einen weiteren brauche.
Die Clients können alle denselben lokalen Port verwenden, nur der Host benötigt pro Client einen anderen lokalen Port…

Du kannst z.B. so vorgehen:
- Ein Client meldet sich beim Host über einen festen Port (des Hosts) an (z.B. die 50000) und bekommt als Antwort darauf die für ihn gültige (hostseitige) Port-Nummer mitgeteilt (z.B. die 50002)
- danach läuft die Kommunikation zwischen Host und diesem Client über Port 50002 (hostseitig) ab.
- meldet sich ein weiterer Client, bekommt er einen anderen Host-Port zugeordnet (z.B die 50003)

Hier hast du den Aufwand bei der Verwaltung der Clients und ihrer hostseitigen Ports. Für jeden Port musst du dann auch eine Routine haben, die dort liest/schreibt.

Ich umgehe das mit festen Ports auf beiden Seiten und einer Kennung in der Botschaft. Dafür habe ich den Aufwand, dass jede Leseroutine alle Botschaften empfängt und nur die jeweils relevanten herausfiltern muss.

Du darfst dir jetzt überlegen, was für dich einfacher zu implementieren ist und was weniger Rechenlast auf den Clients erzeugt…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.10.2014, 11:29
Beitrag #5

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
RE: UDP - 1Port, n Connections
Danke für deine Ausführungen, GerdW. Ich habe das Prinzip dahinter verstanden (denke ich zumindest Cool). Das ist nicht das Problem. Die von dir vorgeschlagene Methode bzgl. Msg Auswertung kann ich nicht umsetzen, da ich keinen Einfluss auf die Clients habe. Demnach muss ich diese direkt ansprechend.

Nun muss ich mir die Frage stellen, was der Unterschied zwischen dem Socket Port und dem Source/Destination Port (je nachdem von welcher Seite man das betrachtet) ist?
   

Die Hilfe ist da ausnahmsweise nicht sehr aussagekräftig:

UDP Write:
port or service name can accept a numeric or string input. port or service name identifies what port to write to. If you specify a service name, LabVIEW queries the NI Service Locator for the port number that the server registered.

UDP Open:
port is the local port with which you want to create a UDP socket.

Wo ist der Unterschied zwischen den beiden Ports bzw. dem Write Port und dem erzeugten Socket mittels UDP Open?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.10.2014, 11:32
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: UDP - 1Port, n Connections
Hallo NoWay,

bei UDP hast du einen lokalen Port (über den der Host seine Kommunikation rausschickt) und einen remote Port (über den der Client lauscht).
Bei UDPOpen gibst du den localPort an, bei UDPWrite musst du den remotePort des Empfängers angeben…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.10.2014, 13:28
Beitrag #7

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
RE: UDP - 1Port, n Connections
Hallo GerdW.

Also langsam hab ich es verinnerlicht. Da ich parallel zu der hier geführten Unterhaltung diverse Dinge ausprobiert habe, verstehe ich nun, wie der Hase zu laufen hat. Ich war zuvor in der Annahme, ich müsse für jeden Client einen separaten Socket erzeugen. Das resultierte in einer Fehlermeldung, sobald mehr wie ein Socket erzeugt bzw. beschrieben wurde. Die Differenzierung der Clients erfolgt ja über die IP Adresse. Im Endeffekt habe ich den Wald vor lauter Bäumen nicht gesehen -.-" Es genügt, wie du sagtest, einen Socket zu erzeugen und auf den Remote Port zu senden. Die Antwort kommt auf dem gleichen Port wieder zurück und der Host muss dann die IP Adresse auswerten, um die Nachrichten zuzuordnen.
Bildlich gesprochen ist mir nicht nur ein Licht aufgegangen sondern gleich eine ganze Leuchten-Abteilung Tongue Danke für deine Hilfe!

NoWay
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: