Leo schrieb:> IndentationError: unexpected indentLeo schrieb:> sock = socket.socket(socket.AF_INET, # Internet socket.SOCK_DGRAM) # UDP
Wenn die Forensoftware da nicht deinen Sourcecode arg verunstaltet hat,
dann erklär mal etwas genauer, was davon Code ist, und was Kommentar.
Der python-Interpreter versteht das auf jeden Fall nicht.
Oliver
# Receive the data in small chunks and retransmit it
19
whileTrue:
20
data=connection.recv(16)
21
print>>sys.stderr,'received"%s"'%data
22
ifdata:
23
print>>sys.stderr,'sendingdatabacktotheclient'
24
connection.sendall(data)
25
else:
26
print>>sys.stderr,'nomoredatafrom',client_address
27
break
28
29
finally:
30
# Clean up the connection
31
connection.close()
Wenn ich diesen Code in Python ausführe kommt diese Fehlermeldung:
Traceback (most recent call last):
File "UdpServer.py", line 7, in <module>
sock.bind(server_address)
File "/usr/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 99] Cannot assign requested address
Das sieht nach klassischer Copy/Paste-"Programmierung" aus. Irgendwelche
Code-Stücke so lange planlos ausprobieren, bis irgend etwas irgend etwas
tut oder auch nicht.
Ohne die allereinfachsten Grundkenntnisse zu Python, Sockets, und
überhaupt allem, was du da versuchst, wird das nichts.
Oliver
Leo schrieb:> server_address = ('192.168.10.40', 4000)Leo schrieb:> IP raspberry pi: 192.168.10.45
Was fällt dir auf, wenn du beide IPs vergleichst?
Was könnte das mit dieser Meldung zu tun haben?
Leo schrieb:> socket.error: [Errno 99] Cannot assign requested address
Udo schrieb:> from socket import *
Bittebitte diese Unsitte nicht noch weiter verbreiten. Wildcard-Imports
sind in Ordnung, wenn man mal schnell was im CLI ausprobieren muss,
ansonsten nicht. Die Fähigkeit, den Namensraum sauber zu halten, gehört
zu den Stärken von Python, aber man muss sie auch nutzen. Wenn das
Skript erst einmal wächst, ist es dafür zu spät, also muss man das von
Anfang an konsequent richtig machen.
Leo schrieb:> Fehlermeldung:> File "UdpServer.py", line 2> sock = socket.socket(socket.AF_INET, # Internet socket.SOCK_DGRAM) # UDP> ^> IndentationError: unexpected indent
Ja, da steht doch die Antwort auf deine Frage ...
LG, Sebastian
Wer einen Server aufsetzt, egal ob TCP oder UDP, schreibt gerne 0.0.0.0
als IP-Adresse ins bind(), an Stelle einer festen Adresse. Weils dann
unabhängig von der Adresse des Servers immer dessen diverse Adressen
sind, loopback/127.0.0.1 inklusive. Das sieht man auch am Output von 'ss
-lun'.
Leo schrieb:> IndentationError: unexpected indent
Hallo Leo, die praktischen Tipps, die Du bisher erhalten hast, waren und
sind ja zielführend. Meine Überlegungen gehen daher in eine andere
Richtung und betreffen Deine... grundsätzliche Lösungsstrategie. Schau,
Programmieren ist nicht einfach, Netzwerke sind nicht einfach,
Netzwerkprogrammierung multipliziert die Komplexität beider Aspekte --
und manche würden sogar nicht ganz zu Unrecht sagen, daß dabei sogar
eher eine Potenzierung als eine Multiplikation zur Anwendung kommt. Und
auch wenn Python eine besonders leicht zu erlernende Programmiersprache
ist, hat es in manchen Bereichen doch seine Tücken und Fallstricke...
Zunächst sehe ich, daß Du offensichtlich die Einstiegskapitel zum Thema
Python entweder nicht gelesen oder vielleicht auch nicht verstanden hast
-- sonst wäre Dir der von mir zitierte Syntaxfehler nicht unterlaufen,
oder Du hättest ihn selbst verstehen und beheben können. Außerdem
benutzt Du noch Python2, aber das ist schon seit eineinhalb Jahren tot.
Dann lese ich, daß Du einen UDP-Server schreiben möchtest, aber bei
Deinem Versuch das socket-Modul und so ausgerechnet eine relativ
systemnahe Bibliothek benutzen willst -- anstatt zum Beispiel die
wesentlich komfortablere Standardbibliothek socketserver zu benutzen.
Zudem versuchst Du, Befehle mit UDP zu benutzen, die zu TCP gehören,
verhaust die Nummer mit den IP-Adressen, und... ehrlich gesagt habe ich
so ein bisschen das Gefühl, daß Du (wie so viele) UDP nur deswegen
benutzen willst, weil es Dir ein bisschen einfacher erscheint, kann das
sein?
Wie dem auch sei: niemand bedauert es mehr als ich, Dir sagen zu müssen,
daß das so nicht funktionieren wird. Von irgendwoher irgendwelchen Code
zusammen zu kopieren und dann auf einem Deiner Systeme auszuführen, ohne
zu verstehen, was der Code tut, ist ein gravierendes Sicherheitsproblem.
Dieses Sicherheitsproblem wird noch größer, wenn der betreffende Code
einen Netzwerkserver startet, über den von anderen Systemen auf das
Deine zugegriffen werden kann.
Insofern bitte ich Dich: arbeite erst einmal ein gutes Tutorial zu
Python durch, hier [1,2] (englisch) oder [3] (deutsch) gibt es ganz gute
Tutorials im Internet, als Bücher sollen zum Einstieg die Bücher "Python
für Dummies" und "Programmieren lernen mit Python" recht gut sein,
vielleicht haben andere in diesem Thread noch bessere Empfehlungen. Wenn
Du Dir ein entsprechendes Online-Tutorial oder Buch ausgesucht hast,
dann arbeitest Du es durch, probierst die Codebeispiele aus, veränderst
sie und arbeitest Dich so erst einmal in die Programmierung an sich und
insbesondere natürlich in die Sprache Python ein. Plane dafür ruhig
einige Wochen ein und stell sicher, daß Du das Gelernte nicht nur
abtippen kannst, sondern auch verstanden hast. Viel Spaß und Erfolg
dabei!
[1] https://www.learnpython.org/
[2] https://docs.python.org/3/tutorial/
[3] https://py-tutorial-de.readthedocs.io/de/python-3.3/