J'ai essayé de comprendre le fonctionnement des sockets et de sélectionner un exemple de code trouvé sur cette page pour un programme de socket client très simple. S'agissant d'un exemple de code de base, j'ai supposé qu'il ne contenait aucune erreur, mais lorsque j'essaie de le compiler, le message d'erreur suivant s'affiche.
Fichier "client.py", ligne 4, dans client_socket.connect (('localhost', 5000)) Fichier "", ligne 1, dans connect socket.error: [Errno 111] Connexion refusée.
J'ai cherché à peu près tous les aspects de cette erreur, et les personnes qui ont eu des problèmes similaires semblent avoir été aidées en changeant le numéro de port, en utilisant "connect" au lieu de "bind", et quelques autres choses, mais aucune les appliqué à ma situation. Toute aide est grandement appréciée, car je suis très nouveau dans la programmation réseau et assez nouveau dans python.
À propos, voici le code au cas où ce lien ne fonctionnerait pas pour une raison quelconque.
#client example
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 5000))
while 1:
data = client_socket.recv(512)
if ( data == 'q' or data == 'Q'):
client_socket.close()
break;
else:
print "RECIEVED:" , data
data = raw_input ( "SEND( TYPE q or Q to Quit):" )
if (data <> 'Q' and data <> 'q'):
client_socket.send(data)
else:
client_socket.send(data)
client_socket.close()
break;
Il essaie de se connecter à l'ordinateur sur lequel il est installé sur le port 5000, mais la connexion est refusée. Êtes-vous sûr d'avoir un serveur en cours d'exécution?
Sinon, vous pouvez utiliser netcat
pour tester:
nc -l -k -p 5000
Certaines implémentations peuvent vous obliger à omettre le -p
drapeau.
Voici l'exemple le plus simple python socket.
Du côté serveur:
import socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 8089))
serversocket.listen(5) # become a server socket, maximum 5 connections
while True:
connection, address = serversocket.accept()
buf = connection.recv(64)
if len(buf) > 0:
print buf
break
Côté client:
import socket
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('localhost', 8089))
clientsocket.send('hello')
Voici un programme de socket assez simple. C'est à peu près aussi simple que les sockets.
pour le programme client (CPU 1)
import socket
s = socket.socket()
Host = '111.111.0.11' # needs to be in quote
port = 1247
s.connect((Host, port))
print s.recv(1024)
inpt = raw_input('type anything and click enter... ')
s.send(inpt)
print "the message has been sent"
Vous devez remplacer le 111.111.0.11 à la ligne 4 par le numéro IP trouvé dans les paramètres réseau du second ordinateur.
Pour le programme serveur (CPU 2)
import socket
s = socket.socket()
Host = socket.gethostname()
port = 1247
s.bind((Host,port))
s.listen(5)
while True:
c, addr = s.accept()
print("Connection accepted from " + repr(addr[1]))
c.send("Server approved connection\n")
print repr(addr[1]) + ": " + c.recv(1026)
c.close()
Exécutez le programme serveur, puis le client.
Il semble que votre client tente de se connecter à un serveur inexistant. Dans une fenêtre Shell, exécutez:
$ nc -l 5000
avant d’exécuter votre code Python. Il servira de serveur d’écoute sur le port 5000 auquel vous vous connecterez. Ensuite, vous pourrez jouer en tapant dans votre fenêtre Python et le voir apparaître dans l'autre terminal et vice versa.
Vous pouvez être déroutant lors de la compilation. Python ne comporte aucune étape de compilation! :) Dès que vous tapez python myprogram.py
le programme s'exécute et, dans votre cas, tente de se connecter à un port 5000 ouvert, générant une erreur si aucun programme serveur n'y écoute. On dirait que vous connaissez les langages en deux étapes, qui nécessitent une compilation pour produire un exécutable - et vous confondez ainsi la compilation à l'exécution de Python selon laquelle "je ne trouve personne écoutant sur le port 5000!" Avec une erreur lors de la compilation. Mais, en fait, votre code Python est correct; il vous suffit de faire apparaître un écouteur avant de le lancer!