Expliquer buffers s'il vous plaît
-
16-09-2019 - |
Question
Je suis en train de trouver des exemples sur la programmation socket et suis tombé sur ce script: http://stacklessexamples.googlecode.com/svn/trunk/examples/ réseau / mud.py
Lors de la lecture par ce script que j'ai trouvé cette ligne: listenSocket.listen (5)
Si je comprends bien - il lit 5 octets de la mémoire tampon et puis fait des choses avec elle ...
mais ce qui se passe si plus de 5 octets ont été envoyés par l'autre bout?
à l'autre endroit de ce scénario, il vérifie l'entrée contre 4 commandes et si on le voit \ r \ n dans la chaîne. DonT commandes comme "look" plus \ r \ n faire pour plus de 5 octets?
Alan
La solution
Ce qui suit est applicable aux prises en général, mais il devrait aider à répondre à votre question sur l'utilisation des sockets de Python.
socket.listen () est utilisé sur un serveur socket pour écouter les demandes de connexion entrantes.
Le paramètre passé à écouter est appelé backlog et cela signifie combien de connexions doivent accepter la prise et mettre dans un tampon en attente jusqu'à ce que vous avez terminé votre appel à l'accepter (). Cela vaut pour les connexions qui sont en attente de se connecter à votre serveur de prise entre le moment où vous avez appelé l'écoute () et le temps que vous avez terminé un appel correspondant à accepter ().
Alors, dans votre exemple vous configurez l'arriéré de 5 connexions.
Remarque .. si vous définissez votre carnet de commandes à 5 connexions, les connexions suivantes (6e, 7e, etc.) seront supprimés et la prise de connexion recevra un erreur de connexion message (quelque chose comme un message "hôte a activement refusé la connexion")
Autres conseils
Cela peut vous aider à comprendre le code: http://www.amk.ca/ python / howto / prises /
Le 5
argument à listenSocket.listen
est pas le nombre d'octets à lire ou tampon, il est le backlog
:
Écoutez les connexions à la prise. L'argument de retard Précise le nombre maximal de file d'attente et les connexions doivent être d'au moins 1; la valeur maximale dépend du système (Généralement 5).