Этот пост неправильно помечен как 'send', так как я не могу создать новые теги.
У меня есть очень простой вопрос об этом простом эхо-сервере. Вот некоторые фрагменты кода.
клиент
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()
Теперь это работает нормально, за исключением случаев, когда клиент отправляет пустую строку (нажав клавишу возврата в ответ на "ввести данные:" ), и в этом случае я вижу какое-то тупиковое поведение.
Теперь, что именно происходит, когда пользователь нажимает на клиентскую сторону? Я могу только представить, что блоки вызовов sendall ждут добавления некоторых данных в буфер отправки, в результате чего вызов recv блокируется по очереди. Что здесь происходит?
Спасибо за чтение!
Более того, вызов sendall()
ничего не делает (поскольку нет данных для отправки), и, таким образом, вызов recv()
на клиентских блоках, ожидающих данные, но поскольку ничего не было отправлено на сервер, сервер никогда не отправляет любые данные назад, так как он также блокируется на его начальном recv()
, и, следовательно, оба процесса блокируются.