web-dev-qa-db-fra.com

OSError: [Errno 107] Le point de terminaison de transport n'est pas connecté

J'essaie d'apprendre à utiliser les sockets dans python pour communiquer entre deux ordinateurs. Malheureusement, j'obtiens cette erreur lorsque tout semble correct:

OSError: [Errno 107] Le point de terminaison de transport n'est pas connecté

Lors de la recherche sur Google, j'ai constaté que cela était dû au fait que la connexion avait peut-être chuté. Mais j'exécute le côté client et le côté serveur du programme sur la même machine elle-même. J'ai essayé de me connecter à nouveau du côté client et j'obtiens ceci:

OSError: [Errno 106] Le point de terminaison de transport est déjà connecté

indiquant que la connexion précédente est toujours intacte. Je suis assez confus quant à ce qui se passe et comment le faire fonctionner. Voici une capture d'écran qui montre ce que j'essaie de faire et le problème:

enter image description here

10
daltonfury42

J'ai testé votre code avec un petit changement sur python 3.5.0 et ça marche: je pense que l'astuce est dans la méthode sock.accept() qui retourne un Tuple:

socket.accept () Acceptez une connexion. Le socket doit être lié à une adresse et à l'écoute des connexions. la valeur de retour est une paire (conn, address) où conn est un nouvel objet socket utilisable pour envoyer et recevoir des données sur la connexion, et address est l'adresse liée à la socket à l'autre extrémité du lien.

serveur

#server
>>> import socket
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> sock.bind(("localhost", 8081))
>>> sock.listen(2)
>>> conn, addr = sock.accept()
>>> data= conn.recv(1024).decode("ascii") 

client:

#client
>>> import socket
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> sock.connect(("localhost",8081))
>>> sock.send("hi".encode())
2
>>> sock.send("hiiiiiii".encode())
8
>>> sock.send(("#"*1020).encode())
1020
21
Iman Mirzadeh