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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top