python socket.recv / sendall blocco delle chiamate
Domanda
Questo post è etichettato in modo non corretto 'inviare' visto che non posso creare nuovi tag.
Ho una domanda molto di base su questo semplice server eco. Qui ci sono alcuni frammenti di codice.
client
while True:
data = raw_input("Enter data: ")
mySock.sendall(data)
echoedData = mySock.recv(1024)
if not echoedData: break
print echoedData
server
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()
Ora, questo funziona bene, tranne quando il client invia una stringa vuota (premendo il tasto invio in risposta a "inserire i dati:")., Nel qual caso vedo un comportamento deadlock-ish
Ora, che cosa succede esattamente quando l'utente preme ritornano sul lato client? Posso solo immaginare che i blocchi di chiamata SENDALL attesa di alcuni dati da aggiungere al buffer di trasmissione, causando la chiamata recv per bloccare a sua volta. Cosa sta succedendo qui?
Grazie per la lettura!
Soluzione
Altri risultati simili, la chiamata sendall()
non fa nulla (dal momento che non ci sono dati da inviare), e quindi la chiamata recv()
sul client blocchi in attesa dei dati, ma dal momento che nulla è stato inviato al server, la Server non invia mai alcun dato indietro da allora è anche bloccato sul suo recv()
iniziale, e quindi entrambi i processi sono bloccati.