Πως ακριβώς θα επικοινωνούν μεταξύ τους τα VMs χρησιμοποιώντας sockets; Δοκίμασα επιτυχώς να επικοινωνήσω με τον υπολογιστή μου και το VM που έχει την publc IP.Όμως στην επικοινωνία μεταξύ των VMs λαμβάνω κάποια errors.
Στην python όταν σε VM χωρίς IPv4 χρησιμοποιώ την εντολή "socket.gethostbyname(socket.gethostname())",η οποία λαμβάνει την ΙΡ του συγκεκριμένου μηχανήματος, λαμβάνω το εξής error "socket.gaierror: [Errno -2] Name or service not known"
Όταν έχω στήσει ένα δίκτυο ΝΑΤ και τρέχω την ίδια εντολή σε VM χωρίς ΙΡv4,τότε γίνεται κανονικά το bind του socket.Tρέχω τις ακόλουθες εντολές: PORT = 6000 SERVER = socket.gethostbyname(socket.gethostname()) ADDR = (SERVER, PORT) server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(ADDR) server.listen() print(f"[LISTENING] Server is listening on {SERVER}")
και η εντολή print εμφανίζει : "[LISTENING] Server is listening on 127.0.1.1 "
Στη συνέχεια όμως όταν προσπαθώ από άλλο Vm να συνδεθώ, τότε λαμβάνω το εξής error : "socket.error: [Errno 111] Connection refused"
Τι δεν κάνω σωστά; Μήπως αντί για AF_INET θα έπρεπε να χρησιμοποιήσω AF_INET6 χωρίς το δίκτυο ΝΑΤ;
Καλησπέρα,
Δοκίμασε να κάνεις server.bind(('0.0.0.0', port))
Όπου port η θύρα της επιλογής σου. Λογικά θα λύσει το θέμα. Υποθετω πως η μεταβλητή SERVER εχει παρει καποιο ADDR που δείχνει στο local host απο την συναρτηση που το επιστρέφει.
Πρακτικα σε επικοινωνία μεταξύ διαφορετικών μηχανημάτων πρέπει να γίνεται expose το socket σε ip και οχι στο localhost για ειναι προσβασιμο από τον εξω κόσμο.
-- Nikos Provatas Ph.D. Candidate Computing Systems Laboratory (CSLab) National Technical University of Athens
Στις 6 Ιαν 2021, 19:30 ,και ώρα 19:30 ,"Σκουρτσίδης Γιώργος" el14307@central.ntua.gr έγραψε:
Πως ακριβώς θα επικοινωνούν μεταξύ τους τα VMs χρησιμοποιώντας sockets;
Δοκίμασα επιτυχώς να επικοινωνήσω με τον υπολογιστή μου και το VM που έχει την publc IP.Όμως στην επικοινωνία μεταξύ των VMs λαμβάνω κάποια errors.
Στην python όταν σε VM χωρίς IPv4 χρησιμοποιώ την εντολή "socket.gethostbyname(socket.gethostname())",η οποία λαμβάνει την ΙΡ του συγκεκριμένου μηχανήματος, λαμβάνω το εξής error "socket.gaierror: [Errno -2] Name or service not known"
Όταν έχω στήσει ένα δίκτυο ΝΑΤ και τρέχω την ίδια εντολή σε VM χωρίς ΙΡv4,τότε γίνεται κανονικά το bind του socket.Tρέχω τις ακόλουθες εντολές: PORT = 6000 SERVER = socket.gethostbyname(socket.gethostname()) ADDR = (SERVER, PORT) server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(ADDR) server.listen() print(f"[LISTENING] Server is listening on {SERVER}")
και η εντολή print εμφανίζει : "[LISTENING] Server is listening on 127.0.1.1 "
Στη συνέχεια όμως όταν προσπαθώ από άλλο Vm να συνδεθώ, τότε λαμβάνω το
εξής error : "socket.error: [Errno 111] Connection refused"
Τι δεν κάνω σωστά; Μήπως αντί για AF_INET θα έπρεπε να χρησιμοποιήσω AF_INET6 χωρίς το δίκτυο ΝΑΤ; -- Ευχαριστώ, Σκουρτσίδης Γιώργος _______________________________________________ Distrib mailing list Distrib@lists.cslab.ece.ntua.gr http://lists.cslab.ece.ntua.gr/mailman/listinfo/distrib
distrib@lists.cslab.ece.ntua.gr