2016-05-20 6 views
0

Ich versuche, einen Client und Server zu machen, wo der Client eine Zeichenfolge an den Server sendet und der Server sendet eine Antwort zurück.Python-Buchsen - WinError 10054

Dies ist die Methode auf meinem Client

def send(self): 
    s = socket.socket() 
    s.connect(("127.0.0.1", 5012)) 

    message = bytes("Send!", "utf-8") 
    s.send(message) 

    data = s.recv(1024) 
    data = str(data, "utf-8") 

    print(data) 

    s.close() 

dies ein Verfahren, bei dem Server, die für die Client-Nachrichten warten.

def listener(self): 
     print("Startet") 
     s = socket.socket() 
     s.bind(("127.0.0.1", 5012)) 
     s.listen(1) 
     while True: 
      c, addr = s.accept() 

      while True: 
       data = c.recv(1024) 
       data = str(data, "utf-8") 

       print(data) 

       c.send(bytes("OK", "utf-8")) 
      c.close() 

des Lauf ich:

Startet 
Send! 

Exception in thread Thread-1: 
Traceback (most recent call last): 
    File "C:\Anaconda3\lib\threading.py", line 914, in _bootstrap_inner 
    self.run() 
    File "C:\Anaconda3\lib\threading.py", line 862, in run 
    self._target(*self._args, **self._kwargs) 
    File "C:\workspace\Server.py", line 41, in listener 
    data = c.recv(1024) 
ConnectionAbortedError: [WinError 10053] 
An established connection was disconnected by the software on the hostcomputer 

Es druckt das Senden aus !, so zumindest ist es die Nachrichten recieves, aber dann abrupt stoppt. Der Server sollte in der Lage sein, jederzeit zu laufen und eine beliebige Anzahl von Nachrichten von der Client-Sendefunktion zu übernehmen.

Antwort

0

Der Kunde hat eine send() und dann sofort eine recv(), ohne zu überprüfen, ob Daten verfügbar sind (zum Beispiel akzeptieren() verwendet). Wenn der Socket nicht blockiert ist, kehrt recv() sofort zurück (oder es gibt einen anderen Grund). Eine leere Zeichenfolge wird gedruckt und der Socket wird geschlossen. Aus diesem Grund gibt der Server einen ConnectionAbortedError aus, der Client hat die Verbindung bereits geschlossen. Überprüfen Sie dies, indem Sie try/exception um den Client recv() hinzufügen.

Verwandte Themen