it-swarm.com.de

socket.error: [errno 99] kann die angeforderte Adresse und den Namespace in python nicht zuweisen

Meine Serversoftware sagt errno99: cannot assign requested address, Während sie eine andere IP-Adresse als 127.0.0.1 Zum Binden verwendet.

Aber wenn die IP-Adresse 127.0.0.1 Ist, funktioniert es. Hat es mit Namespaces zu tun?

Ich führe meine Server- und Client-Codes in einem anderen python=) - Programm aus, indem ich execfile() aufrufe. Ich bearbeite tatsächlich den Mininet-Quellcode execfile ('server.py') execfile ('client1.py') und execfile ('client2.py') Sobald "Sudo mn --topo single, 3" zusammen mit der Erstellung von 3 Hosts aufgerufen wird my Server- und Client-Codes werden ausgeführt. Ich habe unten meine Server- und Client-Codes angegeben.

#server code
import select 
import socket 
import sys 
backlog = 5 
size = 1024 
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server.bind(("10.0.0.1",9999)) 
server.listen(backlog) 
input = [server] 
running = 1 
while running: 
    inputready,outputready,exceptready = select.select(input,[],[]) 
    for s in inputready: 
        if s == server: 
            client, address = server.accept() 
            input.append(client)
        else: 
            l = s.recv(1024)
            sys.stdout.write(l)
server.close()


#client code
import socket
import select
import sys
import time
while(1) :
    s,addr=server1.accept()    
    data=int(s.recv(4))
    s = socket.socket()
    s.connect(("10.0.0.1",9999))
    while (1):
        f=open ("hello1.txt", "rb")
        l = f.read(1024)
        s.send(l)
        l = f.read(1024)
        time.sleep(5)
s.close()
24
user2833462

Alles auf das Wesentliche reduzieren, das ist das, womit Sie testen möchten:

import socket
server = socket.socket() 
server.bind(("10.0.0.1", 6677)) 
server.listen(4) 
client_socket, client_address = server.accept()
print(client_address, "has connected")
while 1==1:
    recvieved_data = client_socket.recv(1024)
    print(recvieved_data)

Dies funktioniert unter der Annahme einiger Dinge:

  1. Ihre lokale IP-Adresse (auf dem Server) lautet 10.0.0.1 ( In diesem Video sehen Sie, wie )
  2. Port 6677 wird von keiner anderen Software überwacht

Beachten Sie auch das Grundkonzept der IP-Adressen:

Versuchen Sie Folgendes, öffnen Sie das Startmenü, geben Sie in das Feld "Suchen" cmd ein und drücken Sie die Eingabetaste. Sobald sich die schwarze Konsole öffnet, geben Sie ping www.google.com Ein und geben Sie die IP-Adresse für Google ein. Diese Adresse ist eine lokale IP-Adresse von googles und sie ist an diese Adresse gebunden. Natürlich können Sie keine IP-Adresse von google binden .

In diesem Sinne besitzen Sie Ihre eigenen IP-Adressen. Zuerst haben Sie die lokale IP des Servers, dann aber die lokale IP Ihres Hauses. In der folgenden Abbildung ist 192.168.1.50 Die lokale IP des Servers, an den Sie binden können. Sie besitzen immer noch 83.55.102.40, Aber das Problem ist, dass es sich um den Router und nicht um Ihren Server handelt. Selbst wenn Sie http://whatsmyip.com besuchen und Sie wissen, dass Ihre IP-Adresse 83.55.102.40 Lautet, ist dies nicht der Fall, da nur angezeigt wird, woher Sie kommen. und Sie greifen über einen Router auf Ihr Internet zu.

enter image description here

Damit Ihre Freunde auf Ihren Server zugreifen können (der an 192.168.1.50 Gebunden ist), müssen Sie den Port 6677 An 192.168.1.50 Weiterleiten. Dies geschieht in Ihrem Router. Vorausgesetzt, Sie stecken dahinter.

Wenn Sie in der Schule sind, gibt es höchstwahrscheinlich andere Dilemmata und Router.

29
Torxed

Versuchen Sie Folgendes: server.bind (("0.0.0.0", 6677))

4
WindyYang

wenn Sie localhost oder 127.0.0.1 binden, bedeutet dies, dass Sie nur von lokal aus eine Verbindung zu Ihrem Dienst herstellen können.

sie können 10.0.0.1 nicht binden, da es nicht zu Ihnen gehört, Sie können nur IP-Adresse Ihres Computers binden

sie können 0.0.0.0 binden, da dies bedeutet, dass alle IP-Adressen auf Ihrem Computer vorhanden sind, sodass jede IP-Adresse eine Verbindung zu Ihrem Dienst herstellen kann, wenn sie Verbindung zu einer Ihrer IP-Adressen herstellen kann

0
pumpkindle