Вопрос

Это сообщение неправильно помечено как "отправить", так как я не могу создать новые теги.

У меня есть очень простой вопрос об этом простом эхо-сервере.Вот несколько фрагментов кода.

клиент

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

сервер

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()

Теперь это работает нормально, за исключением случаев, когда клиент отправляет пустую строку (нажав клавишу возврата в ответ на "введите данные:"), и в этом случае я вижу некоторое тупиковое поведение.

Теперь, что именно происходит, когда пользователь нажимает return на стороне клиента?Я могу только представить, что вызов sendall блокирует ожидание добавления некоторых данных в буфер отправки, в результате чего вызов recv, в свою очередь, блокируется.Что здесь происходит?

Спасибо за чтение!

Это было полезно?

Решение

Больше похоже на то, что sendall() вызов ничего не делает (поскольку нет данных для отправки), и, таким образом, recv() позвоните по клиент блокирует ожидание данных, но поскольку на сервер ничего не было отправлено, сервер никогда не отправляет никаких данных обратно, поскольку они также заблокированы при первоначальном recv(), и, таким образом, оба процесса блокируются.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top