Frage zu udp server

Gast #7069445
Lesenswert?
• ▲
▼
Hallo,

ich habe für Testzwecke ein kleines python Skript geschrieben.
Mit diesem Programm sollen quasi alle UDP Nachrichten die empfangen 
werden
angezeigt werden. SObald ich eine öffentlich IP benutze erscheint diese 
Meldung:
1
Traceback (most recent call last):
2
  File "udpServer.py", line 7, in <module>
3
    sock.bind((UDP_IP, UDP_PORT))
4
OSError: [Errno 99] Cannot assign requested address

Sobald ich eine lokale IP verwende erscheint diese Meldung nicht.

python Skript:
1
import socket
2

3
UDP_IP = "xxx.xxx.xxx.xxx"
4
UDP_PORT = 1000
5

6
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
7
sock.bind((UDP_IP, UDP_PORT))
8

9
while True:
10
     data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
11
     print("received message: %s" % data)
Gast #7069452
Lesenswert?
• ▲
▼
Tja, das dürfte daran liegen das dein Rechner eben kein Interface mit 
der Öffentlichen IP besitzt, die hat dein Router und der routet das dann 
auf die lokale Adresse deiner Netzwerkkarte.
Oder hat eine deiner Netzwerkkarten tatsächlich eine öffentliche IP?
Gast #7069516
Lesenswert?
• ▲
▼
python_user schrieb:
> Hallo,
>
> ich habe für Testzwecke ein kleines python Skript geschrieben.
> Mit diesem Programm sollen quasi alle UDP Nachrichten die empfangen
> werden
> angezeigt werden. SObald ich eine öffentlich IP benutze erscheint diese
> Meldung:
>
1
> Traceback (most recent call last):
2
>   File "udpServer.py", line 7, in <module>
3
>     sock.bind((UDP_IP, UDP_PORT))
4
> OSError: [Errno 99] Cannot assign requested address
5
>


Mit anderen Worten: deine Umsetzung (und die muss über das schreiben 
eines Programms hinausgehen) entspricht nicht deinen Erwartungen.

Dein Netzwerkprogramm kann nur funktionieren wenn es auf die 
Netzwerkkonfiguration des Rechners passt/rücksicht nimmt.
Da kann das Programm nicht beliebigen Netzwerkverkehr "sehen" sondern 
bloss den welcher tatsächlich zu/durch dessen Netzwerkinterfaces kommt.
Stichworte: node address, subnet mask.

Also sollte dein Netwerkprogramm zuerst das Betriebssystem fragen wie es 
ums Netzwerk steht und bloss die entsprechend passende Auswahl (an 
Adressen) anbieten/zulassen.

---

Obendrein wird auch nur jener Netzwerkverkehr "sichtbar" der tatsächlich 
im/in den (lokalen, angeschlossenen) Netz(e) überhaupt vorhanden ist.

Auf weiteren Ebenen muss entspr. ein andrer Knoten (Router, Gateway) 
ggfs. dafür sorgen dass Netzwerkverkehr von anderen Netzten in ein 
(lokales, angeschlossenes) Netz gelassen/dupliziert wird.
Erst dann kommt "fremder" Netzwerkverkehr überhaupt bis zum Rechner wo 
dein Netzwerkprogramm rennt.
Gast #7069622
Lesenswert?
• ▲
▼
(prx) A. K. schrieb:
> Wenn der Rechner eine öffentlicbe IP hat (s.o.) ist das nicht nötig, und
> wenn er wie hier keine hat, nützt es nichts.

Doch natürlich, das Script wäre von der IP unabhängig und würde zunächst 
einmal starten. Um das NAT muss er sich ohnehin an anderer Stelle 
kümmern.
Gast #7069687
Lesenswert?
• ▲
▼
Wenn man keine besonderen Anforderungen hat, ist 0.0.0.0 die richtige 
Adresse - dann ist der Dienst auf allen Interfaces (inkl localhost) 
verfügbar.

Wenn der Dienst nur lokal auf diesem Rechner verfügbar sein soll, wird 
127.0.0.1 genommen.

Alles andere ist eher die Ausnahme - dann weiß man aber, warum man das 
macht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren