Eine einfache Demo von Socket-Programmierung blockiert:Wie kann Socket-Client erhalten python ohne in Python
server.py
import socket
host = '127.0.0.1'
port = 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
conn, addr = s.accept()
while True:
data = conn.recv(1024)
print 'Received:', data
if not data:
break
conn.sendall(data)
print 'Sent:', data
conn.close()
client.py
import socket
host = '127.0.0.1'
port = 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall('Hel')
s.sendall('lo world!')
print 'Received:', s.recv(1024)
s.close()
Nun gut Code zu arbeiten. Der Client kann jedoch nicht wissen, ob der Server immer jedes Mal zurücksendet. Ich habe versucht, symmetrischen Code von while-Schleife in server.py
client_2.py
import socket
host = '127.0.0.1'
port = 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall('Hel')
s.sendall('lo world!')
while True:
data = s.recv(1024)
if not data:
break
print 'Received:', data
s.close()
Dieser Code bei
data = s.recv(1024)
blockiert Aber in server.py, wenn keine Daten empfangen, es wird leere Zeichenfolge sein, und brechen von While-Schleife
Warum funktioniert es nicht für Client? Wie kann ich für dieselbe Funktionalität ohne Zeitüberschreitung arbeiten?