Multiple Socket

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
mmusel
User
Beiträge: 6
Registriert: Freitag 20. März 2020, 22:32

Guten Abend zusammen,

ich bin gerade dabei mich mit dem Thema Socket auseinander zu setzen, allerdings habe ich so meine Probleme die Multiple Verbindungen zu verstehen.

Grund: ich möchte mehrere Raspberrys über einen Switch mit einem Server kommunizieren lassen.
Mich verwirrt die Bezeichnung "Verbindung", eigentlich ganz easy aber irgendwie tu ich mich da schwer. Bedeutet jetzt eine Verbindung eine physische Verbindung über ein Kabel zweier Teilnehmer mit einander und ohne andere Teilnehmer im "Netzwerk", oder bedeutet es eine Verbindung zweier Teilnehmer zur Übertragung von Daten, über ein Netzwerk mit mehreren angeschlossenen PC's z.B, die aber andere IP Adressbereiche haben.
Die Beispiele die ich so finden konnte, handeln meistens von Raspberry zu Raspberry über ein Ethernet Kabel, oder mehrere Raspberry über mehrere Kabel mit einem Host, also mehrere Punkt zu Punkt Verbindungen ohne Hub oder Switch.

Ist es denn über das Module socket überhaupt möglich, über Eine einzige physische Verbindung zu einem Switch, mit mehreren Raspberry pi's zu kommunizieren die an dem selben Switch angeschlossen sind? Oder wirklich nur von Punkt zu Punkt ?!
Natürlich würden sich alle Teilnehmer im selben IP Adressbereich befinden z.B 192.168.5.0 damit eine eventuelle Verbindung überhaupt möglich wäre.

Ich hoffe es ist einigermaßen Verständlich was ich sagen/fragen möchte.

Liebe Grüße
M.Musel
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mmusel: ”Verbindung” ist so allgemein, das kann beides (und noch mehr/anderes) bedeuten. Was ist denn das konkrete Problem?

Auch Sockets sind sehr vielseitig, da kommt es auch darauf an welche Art gemeint ist. Unix-Domain-Sockets können beispielsweise nur auf dem gleichen Rechner genutzt werden, sind also für Kommunikation zwischen Prozessen im selben Betriebssystem geeignet.

Da Du IPs erwähnst, reden wir wahrscheinlich von TCP- oder UDP-Sockets? Und bei „Verbindungen“ dann vermutlich von TCP. Da müssen nicht alle Teilnehmer im selben IP-Adressbereich sein. Der Server auf dem das Forum hier läuft ist ja nicht im selben IP-Adressbereich wie Dein Rechner zuhause und trotzdem kannst Du das Forum erreichen, Seiten abfragen und Daten übertragen. Wenn sich beide Seiten im selben IP-Adressbereich befinden, schadet das natürlich nicht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
mmusel
User
Beiträge: 6
Registriert: Freitag 20. März 2020, 22:32

@_blackjack_
Vielen dank schonmal für deine Antwort. Und ja, sorry. Da hab ich wohl wichtige Informationen vergessen :)
Also es geht um das python Modul "socket", welches auf einem Server und eben jenen Clients benutzt werden soll, um eine Verbindung über TCP und einen Port herzustellen.
Bitte seh es mir nach, wenn ich da mit den ausdrücken bissel um mich schmeise, das Thema ist relativ neu für mich.

Gruß
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Das Thema ist neu für dich und superkomplex. Socket-Programmierung wirkt auf den ersten Blick einfach, ist sie aber nicht. So ziemlich jedes Beispiel, das man im Internet findet, ist falsch, weil man so viele Dinge beachten muss, über die dort "hinweggesehen" wird.

Vielleicht möchtest du uns erklären, was du eigentlich vor hast, dann können wir dir sagen, ob du auf dem richtigen Weg bist oder es eigentlich eine viel einfachere Lösung gibt.
Wenn es um reine Kommunikation im Sinne von "Austausch von Daten" geht, dann nimm auf dem Server eines von den Webframeworks wie flask. Dann hast du einen funktionierenden Server und mit http ein bekanntes und funktionierendes Protokoll.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich unterstütze die Nachfrage von sparrow. Bei mehreren Raspis die mit einem Server kommunizieren sollen könnte auch MQTT als Protokoll Sinn machen, nun ja wenn es denn sinnvoll wäre. Es ist also wirklich wichtig zu wissen zu welchem Zweck die Kommunikation stattfinden soll um entscheiden zu können welches Protokoll man verwenden sollte. Und Socketprogrammierung selbst zu machen ist in so gut wie jedem Fall nicht die Antwort die man sucht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich glaube der TE ist noch auf einer viel basaleren Ebene Verstaendnislos: was heisst ein Socket ueberhaupt, und wer kann da mit wem reden. Protokolle darueber sind erstmal egal fuer dieses Verstaendnis, auch wenn MQTT natuerlich eine sehr gute Idee ist.

sockets unterliegen ALLER Netzwerkkommunikation. Wenn ein PI einen anderen in deinem Netzwerk zB via SSH oder per HTTP erreicht, dann ist dein Netzwerk entsprechend eingerichtet. Wenn das NICHT geht, dann muss da etwas an dem Routing (der Art, wie Netzwerkpakete verteilt werden) oder ggf. auch Hardware geschraubt werden. Das ist aber unwahrscheinlich. Und du musst nicht deine Wohnung mit Kabeln von Punkt zu Punkt verschandeln.
mmusel
User
Beiträge: 6
Registriert: Freitag 20. März 2020, 22:32

Hi zusammen,

also es geht um folgendes. Zum einen interessiert es mich und ich würde mich gerne damit beschäftigen um damit arbeiten zu können.
Hintergrund des ganzen ist folgendes.
Es gibt ein Büro in dem 3 Schreibtische stehen. An jedem Schreibtisch steht eine Art Dockingstation in die eine NFC Karte eingesteckt wird und damit der Arbeitsplatz frei geschaltet ( daran arbeite ich gerade).
Ich möchte jetzt vom Arbeitsplatz aus wenn jemand an der Tür klopft, die Türe öffnen. Mit einem druck auf den Touch TFT am Arbeitsplatz soll jetzt ein Kommando an den Server geschickt werden der dann die Türöffnung umsetzt. Das ganze hallt über das Netzwerk welches existiert und bereits von den Schreibtischeinheiten benutzt wird. Beim einstecken der Karte wird in einer SQL Datenbank nachgeschaut ob die Karte berechtigt ist diesen Arbeitsplatz frei zu schalten.

Vielen Dank an euch für die Hilfe.

Liebe Grüßen
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn alle in einem Netzwerk sind, dann geht das. Und wie schon erwaehnt sind da auch irgendwo sockets involviert. Wenn du aber schon einen Server hast, dann benutzt der doch einen Socket. Was ist das also fuer ein Server? Woher kommt der, wie wird der angesprochen?
mmusel
User
Beiträge: 6
Registriert: Freitag 20. März 2020, 22:32

Also der Server auf dem die MySQL Datenbank läuft ist ein normaler Desktop PC. Die Kommunikation hier läuft über das passende python Modul mysql.connector wenn ich mich richtig erinnere.
Den Server den ich benötige um die Befehle umzusetzen von denen ich sprach, um die Tür zu öffnen, den gibt es noch nicht. Die Funktion eines Servers soll auch von einem RPi übernommen werden.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Und was verstehst Du jetzt konkret nicht? Alles was Du hier schreibst, ist sehr schwammig. Da ist es schwierig zu helfen. Welche Komponente hast Du Dir als erstes vorgenommen um sie zu programmieren? Für mich hört sich das so an, als ob Du am besten einen HTTP-Server schreibst, der auf die Commandos von den Raspis horcht.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na dann such dir einen aus. Es kann ein MQTT-Broker sein, wie vorgeschlagen, oder ein Webserver, oder natuerlich theoretisch auch etwas proprietaeres mit einem eigenen Socket. Wuerde ich aber nicht machen, weil das nicht so trivial ist wie oft angenommen, und du offensichlich nicht wirklich in der Materie bewandert bist. Da greift man dann besser ins Regal.
mmusel
User
Beiträge: 6
Registriert: Freitag 20. März 2020, 22:32

@Sirius3, sorry ich würde es besser machen wenn ich könnte :-). Nach wie vor ist meine Frage ob mehrere Verbindungen, also die Möglichkeit Daten zu senden und zu empfangen, zu dem RPi Server möglich sind über socket in Python.
@_deets_, nein bin ich nicht damit wollte ich anfangen und bräuchte hallt die Info ob mehrere Verbindungen von einem RPi der als Server arbeitet zu 3 Client RPi's überhaupt möglich ist. Wenn nicht ist das Thema socket sowieso raus. Die Kern Idee war über Threading eben mehrere Verbindungen herzustellen/aufzubauen um Daten auszutauschen.

Der Zugang zum Büro über NFC ist soweit fertig und wird jetzt nächste Woche getestet ( die Hardware ist noch nicht soweit). Dann wollte ich die Arbeitsplatz Applikation anfangen zu zeichnen. Ich muss mich dann erst mal mit dem Thema socket erst einmal auseinander setzen und ausprobieren bevor ich da die Anwendung mache.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja, es ist moeglich. Ein socket macht eine Netzwerkverbindung auf. Du kannst dutzende, hunderte, tausende davon zwischen verschiedenen Rechnern haben. Irgendwann ist mal schluss, aber nicht fuer das hier skizzierte Problem. Du kannst doch auch mit drei Clients und darauf einem Browser auf einen Webserver zugreifen, der auf dem PI laeft. Das ist genau das gleiche.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Ja, das ist möglich, und die einfachste Art, das zu tun, ist mit einem fertigen HTTP-Server/Client-Modul.
mmusel
User
Beiträge: 6
Registriert: Freitag 20. März 2020, 22:32

Das ist genau die Antwort nach der ich gesucht habe :-) Möglich ja, aber um Welten umfangreicher als ich mir bisher vorgestellt habe.
Ich danke euch für den Support und Hilfe.

Ein schönes Wochenende
Gruß
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mmusel: Ein Raspi ist in der Hinsicht nicht anders als jeder normale PC/Laptop/Server. Der kann per Ethernet und/oder WLAN genau das gleiche machen. Einzig Rechenleistung, Arbeitsspeicher (bei den meisten Modellen), und die Geschwindigkeit des Massenspeichers sind geringer.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten