Объясните сокеты буфера пожалуйста

Я пытался найти примеры программирования сокетов и наткнулся на этот скрипт: http://stacklessexamples.googlecode.com/svn/trunk/examples/networking/mud.py

При чтении этого скрипта я нашел следующую строку: listenSocket.listen(5)

Насколько я понимаю - он читает 5 байтов из буфера, а затем делает вещи с ним...

но что произойдет, если другой конец отправит более 5 байтов?

в другом месте этого скрипта он проверяет ввод для 4 команд и проверяет, есть ли в строке \r\n. Разве такие команды, как "look" плюс \r\n, составляют более 5 байт?

Алан

3 ответа

Решение

Следующее применимо к сокетам в целом, но оно должно помочь ответить на ваш конкретный вопрос об использовании сокетов из Python.

socket.listen() используется на сокете сервера для прослушивания входящих запросов на соединение.

Параметр, передаваемый для прослушивания, называется backlog, и это означает, сколько соединений должен принимать сокет и помещать в ожидающий буфер до тех пор, пока вы не завершите свой вызов accept(). Это относится к соединениям, которые ожидают подключения к сокету вашего сервера между временем, когда вы вызвали listen(), и временем, когда вы завершили соответствующий вызов метода accept().

Итак, в вашем примере вы устанавливаете отставание на 5 соединений.

Обратите внимание... если вы установите в своем списке 5 соединений, следующие соединения (6-е, 7-е и т. Д.) Будут сброшены, и соединительный сокет получит сообщение о соединении с ошибкой (что-то вроде сообщения "хост активно отказался от соединения")

Это может помочь вам понять код: http://www.amk.ca/python/howto/sockets/

Аргумент 5 в listenSocket.listen не количество байтов для чтения или буферизации, это backlog:

socket.listen(backlog)

Прослушайте соединения, сделанные в розетку. Аргумент backlog указывает максимальное количество подключений в очереди и должен быть не менее 1; максимальное значение зависит от системы (обычно 5).

Другие вопросы по тегам