web-dev-qa-db-fra.com

socket.error: [numéro d'erreur 99] ne peut pas affecter l'adresse demandée ni l'espace de nom dans python

Le logiciel de mon serveur dit errno99: cannot assign requested address Lors de l'utilisation d'une adresse IP autre que 127.0.0.1 Pour la liaison.

Mais si l'adresse IP est 127.0.0.1, Cela fonctionne. Est-ce lié aux espaces de noms?

J'exécute mes codes serveur et client dans un autre programme python en appelant execfile()]). Je suis en train de modifier le code source de la mininet. execfile ('server.py') execfile ('client1.py') et execfile ('client2.py'). Ainsi, dès que "Sudo mn --topo single, 3" est appelé avec la création de 3 hôtes mon les codes serveur et client seront exécutés.J'ai donné les codes serveur et client ci-dessous.

#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

En résumé, voici ce que vous voudriez tester avec:

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)

Cela fonctionne en supposant quelques choses:

  1. Votre adresse IP locale (sur le serveur) est 10.0.0.1 ( Cette vidéo vous montre comment )
  2. Aucun autre logiciel n'écoute sur le port 6677

Notez également le concept de base des adresses IP:

Essayez ce qui suit, ouvrez le menu Démarrer, dans le champ "recherche", tapez cmd et appuyez sur Entrée. Une fois la console noire ouverte, tapez ping www.google.com et cela devrait vous donner une adresse IP pour Google. Cette adresse est googles IP locale et ils se lient à cela et évidemment vous pouvez pas vous lier à une adresse IP appartenant à google.

Dans cet esprit, vous possédez votre propre jeu d’adresses IP. Vous avez d’abord l’adresse IP locale du serveur, puis l’adresse IP locale de votre maison. Dans l'image ci-dessous 192.168.1.50 est l'adresse IP locale du serveur auquel vous pouvez vous connecter. Vous possédez toujours 83.55.102.40 mais le problème est qu’il appartient au routeur et non à votre serveur. Donc, même si vous visitez http://whatsmyip.com et que cela vous indique que votre adresse IP est 83.55.102.40 ce n'est pas le cas, car il ne peut voir que votre pays d'origine et vous accédez à Internet par un routeur.

enter image description here

Pour que vos amis puissent accéder à votre serveur (lié à 192.168.1.50) vous devez transférer le port 6677 à 192.168.1.50 et cela se fait dans votre routeur. En supposant que vous êtes derrière un.

Si vous êtes à l'école, d'autres dilemmes et routeurs sont susceptibles de vous poser problème.

29
Torxed

Essayez comme ceci: server.bind (("0.0.0.0", 6677))

4
WindyYang

lorsque vous liez localhost ou 127.0.0.1, cela signifie que vous pouvez niquement vous connecter à votre service à partir de votre réseau local.

vous ne pouvez pas lier 10.0.0.1 parce que ne vous appartient pas, vous ne pouvez que bind ip appartenant à votre ordinateur

vous pouvez lier 0.0.0.0 _ parce que cela signifie toutes les adresses IP de votre ordinateur, de sorte que toutes les adresses IP peuvent se connecter à votre service s’ils le peuvent se connecter à l’une de vos adresses IP

0
pumpkindle