Question

Ce message est marqué « envoyer » mal depuis que je ne peux pas créer de nouvelles balises.

J'ai une question fondamentale sur ce simple serveur d'écho. Voici quelques extraits de code.

client

while True:
 data = raw_input("Enter data: ")
 mySock.sendall(data)
 echoedData = mySock.recv(1024)
 if not echoedData: break
 print echoedData

serveur

while True:
 print "Waiting for connection"
 (clientSock, address) = serverSock.accept()
 print "Entering read loop"
 while True:
     print "Waiting for data"
     data = clientSock.recv(1024)
     if not data: break
     clientSock.send(data)
 clientSock.close()

Maintenant, cela fonctionne bien, sauf si le client envoie une chaîne vide (en appuyant sur la touche de retour en réponse à « entrer des données: »)., Auquel cas je vois un comportement-ish de blocage

Maintenant, ce qui se passe exactement quand l'utilisateur appuie le retour sur le côté client? Je ne peux imaginer que les blocs d'appel Sendall attente pour certaines données à ajouter au tampon d'envoi, ce qui provoque l'appel recv pour bloquer à son tour. Que se passe t-il ici?

Merci d'avoir lu!

Était-ce utile?

La solution

Plus, l'appel sendall() ne fait rien (car il n'y a pas de données à envoyer), et donc l'appel recv() sur le client blocs d'attente pour les données, mais puisque rien n'a été envoyé au serveur, la serveur envoie jamais de données en arrière car il est également bloqué sur sa recv() initiale, et donc les deux processus sont bloqués.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top