Du bist nicht angemeldet.

Werbeanzeige

Chugy

Frischling

  • »Chugy« ist der Autor dieses Themas

Beiträge: 60

Wohnort: Leipzig

  • Private Nachricht senden

1

01.03.2015, 15:45

Python3 IP Adresse nicht erreichbar !? Was tun ?

Hi Leute ich habe folgendes Problem. Ich will Server mit Client kommunizieren lassen.
Das Schema ist ganz einfach Server Script wird gestartet und wartet auf eingehende Verbindung des Clients.


Wenn Client verbindung aufbauen will so wird dieser aktzeptiert und kann nun kommunizieren. Man soll sozusagen eine Nachricht zwischen Client und Server schicken können und das immer abwechselnd.
Der Script den ich geschrieben habe der funktioniert soweit.....allerdings nur mit LOCALHOST.

Wenn ich meine IP anstatt "localhost" eingebe so kommt diese Fehlermeldung [ OSError: [WinError 10049] Die angeforderte Adresse ist in diesem Kontext ungültig ]. Nun wollte ich mich NATÜRLICH !!! kundig machen und habe den fehlercode bei Windows gefunden.
Er sagt mir das die IP nicht zugewiesen werden kann. Ja....aber was bedeutet das jetzt im Klartext. Mir mangelt es etwas am Verständnis was nun damit gemeint ist.



Jetzt kommt das was mich eben verwundert. Wenn ich mit dem Client zugreifen will OHNE das der Serverscript aktiv ist kann der Client trotzdem was finden aber nicht connecten da keine Antwort kommt.

Bitte helpt mir ein wenig weiter ich stecke fest. Mit Localhost funktioniert es aber mit meiner IP nicht.
Den Port 4950 habe ich extra per Port triggering im Router unter TCP freigeschaltet und sollte denke ich mal dementsprechen funktionieren. Habe mein Router auch extra auf IPv4 umschalten lassen aber es funktioniert irgendwie nichts....

LG Chugy
»Chugy« hat folgende Dateien angehängt:
  • server.py (503 Byte - 102 mal heruntergeladen - zuletzt: 13.11.2022, 01:32)
  • client.py (528 Byte - 84 mal heruntergeladen - zuletzt: 07.11.2022, 10:44)

Schorsch

Supermoderator

Beiträge: 5 114

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

01.03.2015, 16:14

Ich versuche dir mal zu helpen;)
Lokale Verbindungen auf deinem Rechner funktionieren. Du willst dass das ganze jetzt übers Internet funktioniert richtig? Da musst du Portweiterleitung am Router aktivieren. Bzw konfigurieren. Das ist jetzt aber nicht ganz klar zu erkennen bei dem was du schreibst. Wichtig ist dass dein Rechner intern im Netzwerk eine andere IP hat als nach außen zum Internet hin. Auf Seiten wie dieser kannst du zum Beispiel sehen welche IP du nach außen hin hast. Die IP ist für alle Rechner in deinem lokalen Netzwerk gleich. Zumindest solange sie über den selben Router nach außen hin verbunden sind. Die IP die du intern im Netzwerk hast kannst du zum Beispiel über die Konsole über den Befehl "ipconfig" abfragen. Zumindest unter Windows. Linux hat das Programm "ifconfig". Beide Programme geben ein paar mehr Daten als nur die IP aus. Du musst dir deine IP aus der Ausgabe dann raussuchen. Das sollte aber kein Problem sein. Guck zumindest ob das Programm mit einer lokalen IP läuft. Dann kannst du auch andere Fehler ausschließen. Wie gesagt, damit es über das Internet klappt musst du nur den Router richtig konfigurieren.
Also was du zu tun hast, guck ob es lokal über die IP deines Rechners klappt. Wenn nein, dann gehts an die Fehlersuche. Wenn das klappt, dann muss man nur wissen welchen Router du hast, das Handbuch dazu im Netz suchen und da kann man normal nachlesen wie das mit den Ports klappt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Chugy

Frischling

  • »Chugy« ist der Autor dieses Themas

Beiträge: 60

Wohnort: Leipzig

  • Private Nachricht senden

3

01.03.2015, 16:31

ich antworte gleich richtig muss das essem umdrehen !!! aber DANKE :D

Chugy

Frischling

  • »Chugy« ist der Autor dieses Themas

Beiträge: 60

Wohnort: Leipzig

  • Private Nachricht senden

4

01.03.2015, 16:51

Also folgender Maßen. Ich habe mir von Blender das "Multiplayer Addon" herunter geladen.

Das ist ganz einfach konzipiert. Man hat ne Server und ne Client Datei. Beim Server musste man nur den Port eingeben. Beim Clienten hingegen musste man die IP und Port angeben.
Ich habe damit ich ÜBERhAUPT Hosten kann meine Internetleitung von IPv6 auf IPv4 umstellen lassen.

Ich habe dementsprechend eine Port Weiterleitung und Port Triggering eingeschaltet mit dem Port Wert "4950" der für UDP als auch als auch für TCP freigegeben ist.
Ich habe eigentlich alles richtig gemacht.
Nun habe ich gerade ebend festgestellt das meine "WLAN Station" rot leuchtet obwohl ich mit meinem Handy WLan hatte. O_o Also ging ich ganz zu frieden hin.......deaktivierte das WLAn und machte ein Router Neustart.

Jetzt gehts..... -_- weiß aber allerdings nicht wo da bitte das Problem lag.

Die Scripts die ich hier mit geliefert habe funktionieren immernoch nicht. Meine IP "laut script" kann nicht zugewiesen werden und ist im Kontext ungültig. Also muss mein Script nicht ganz vollstädnig sein hmm : / ich habe diese Scripts aus einem Buch was ich derzeit lese. Dort wird immer alles nur mit "Localhost" gemacht aber nicht gezeigt wie man jetzt richtig ONLINE damit geht......hmm......

5

01.03.2015, 17:34

Beim Server musst du ziemlich sicher statt localhost die lokale IP des Servers eintragen, also z.B. 192.168.1.5 Sonst ist dieser nur lokal erreichbar.

PS: Hab es eben getestet, localhost beim Server funktioniert nicht.

PS2: Statt deine Internetleitung auf IPv4 umzustellen, hättest du Python auch sagen, können, dass es Ipv6 nutzen soll.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ChrisvA« (01.03.2015, 17:45)


6

01.03.2015, 17:43

Fehler 10049 meint, dass du versuchst, einen Socket an eine IP zu binden, die es aber auf dem Computer nicht gibt. Wann tritt denn die Fehlermeldung auf?
@ChrisVA: Der Fehler tritt doch beim Client auf.

7

01.03.2015, 17:51

Hab die beiden Skripte eben zum laufen gebracht, statt input sollte man raw_input verwerden (sagt Google):
Client:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import socket

ip = raw_input("Ip Adresse: ")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, 4950))
#s.connect(("raspberry", 4950))

while True:
    if s.connect:
        print("Connected...")
    else:
        print("Verbindung fehlgeschlagen")
    


    
    try:
        while True:
            nachricht = raw_input("Nachricht: ")
            s.send(nachricht.encode())
            antwort = s.recv(1024)
            print("[{}] {}".format(ip, antwort.decode()))             
    finally:
        s.close()

raw_input("Ende")


Server:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("raspberry.fritz.box", 4950))
#s.bind(("localhost", 4950))
s.listen(1)

try:
    while True:
        komm,addr = s.accept()
        while True:
            data = komm.recv(1024)

            if not data:
                komm.close()
                break

            print("[{}] {}". format(addr[0], data.decode()))
            nachricht = raw_input("Antwort: ")
            komm.send(nachricht.encode())
finally:
    s.close()


Das raspberry.fritz.box muss die lokale Serverip sein.


PS: Hast du es schon mal lokal zwischen 2 Computern getestet?

@Roflo Das ist aber in jedem Fall auch ein Fehler, der dazu führt, dass sich der Client nicht verbinden kann. Der wäre als nächstes aufgetreten.

8

01.03.2015, 17:58

Benutz lieber socket.gethostname(), um den Namen des Computers herauszufinden.

9

01.03.2015, 18:01

Benutz lieber socket.gethostname(), um den Namen des Computers herauszufinden.

s.bind(("", 4950))
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

10

01.03.2015, 18:03

Das geht natürlich auch ;)

Werbeanzeige