Frage

Dieser Beitrag ist falsch getaggt ‚Senden‘, da ich nicht neue Tags erstellen kann.

Ich habe eine sehr grundlegende Frage zu diesem einfachen Echo-Server. Hier sind einige Code-Schnipsel.

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

Jetzt das funktioniert gut, außer wenn der Kunde sendet eine leere Zeichenfolge (durch die Return-Taste als Antwort trifft auf „Daten eingeben:“). In diesem Fall ich einige Deadlock-ish Verhalten sehen

Nun, was genau passiert, wenn der Benutzer drückt auf der Client-Seite zurückkehren? Ich kann nur vorstellen, dass die sendall Aufruf blockiert warten auf einige Daten in den Sendepuffer hinzugefügt werden, die recv Anruf verursacht wiederum zu blockieren. Was ist hier los?

Vielen Dank für das Lesen!

War es hilfreich?

Lösung

Ähnliche, der sendall() Anruf nichts tut (da es keine Daten ist zu senden), und damit der recv() Anruf auf den Client Warte Blöcke für Daten, aber da war nichts an den Server gesendet, die Server sendet nie Daten zurück, da sie auch auf seine ursprüngliche recv() blockiert ist, und somit werden beide Prozesse blockiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top