2016-04-18 4 views
0

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?

Antwort

Verwandte Themen