Python Socket Bibliothek

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Wrobb
User
Beiträge: 1
Registriert: Samstag 6. Juni 2020, 21:55

Hi,

ich habe vor einen Roboter mit nem Raspberry Pi zu bauen und diesen dann mit der Socket Bibliothek von python über das Internet zu steuern. Als Server will ich nen zweiten Raspberry Pi nutzen der dann im Heimnetzwerk über port forwarding eigentlich auch für die öffendlichkeit erreichbar seinen müsste. Da ich mich aber mit Netzwerkprogrammierung so gut wie gar nicht auskenne hat dies bei den ersten Versuchen nicht funktioniert.

Und daher auch folgende Fragen:

Im Server Script muss man ja den Server an eine IP und einen Port binden, muss das nun die IP des Servers oder die des Routers sein und sollte der Port der gleiche sein den man auch beim port forwarding gewählt hat?

Und Exakt die gleichen Fragen habe ich dann auch beim Client Script: Welche IP und welcher port ?

Es könnte durchaus sein das diese Fragen kommplett dumm sind und überhaupt keinen Sinn machen und dennoch würde ich mich über eine Antwort freuen.

Danke schon mal im Voraus

Hannes
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst hier genau unterscheiden zwischen binden (bind Aufruf) und verbinden (connect Aufruf).

Ersteres machen Server. Und können das nur auf die eigenen Netzwerk-Schnittstellen tun. 0.0.0.0 ist die IP für “alles “ in dem Fall. Und da spielt auch der port eine Rolle, und natürlich muss das der gleiche sein, wie der den du weiterleitest im Router. Auf die IP des Routers kannst du dich nicht binden.

Connect kommt im Client zum Einsatz. Und das gibt einen zielport an. Faktisch kannst du auch einen Quell Port angeben. Der ist aber eigentlich irrelevant und es wird vom System einer zugeteilt, der frei ist.
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

Socket-Programmierung ist nicht gerade trivial und so ziemlich jedes Beispiel im Internet hat deutliche Schwachstellen.
Es bietet sich an, hier auf bereits bestehende Lösungen zurückzugreifen und einen Webserver auf dem Raspberry Pi zu starten und ein entsprechendes Framework wie Flask zu verwenden.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@sparrow: Robotersteuerung ist nicht gerade die Stärke von HTTP. Aber statt dessen gibt es andere etablierte Protokolle, RabittMQ.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich wuerde noch leichtgewichtigere Alternativen wie ZeroMQ oder nanomsg empfehlen. Message-orientiert, und mit sehr geringem Aufwand zu nutzen. Damit habe ich sogar so einen Roboter schonmal umgesetzt.
Antworten