2016-05-20 6 views
0

Я пытаюсь создать клиент и сервер, на которых клиент отправляет строку на сервер, и сервер отправляет ответ.Сокеты Python - WinError 10054

Это метод на моем клиенте

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

это метод на сервере, который ждет клиентских сообщений.

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

Запуск этого я получаю:

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 

Он печатает Отправлять !, так по крайней мере, recieves сообщения, но потом резко останавливается. Сервер должен иметь возможность запускать все время и принимать произвольное количество сообщений от функции отправки клиентов.

ответ

0

Клиент отправляет(), а затем немедленно recv(), не проверяя, доступны ли данные (например, с помощью accept()). Если сокет не блокирует, recv() немедленно возвращает (или он исключает по какой-либо другой причине). Пустая строка печатается и сокет закрывается. Вот почему сервер дает ConnectionAbortedError, клиент уже закрыл соединение. Проверьте это, добавив try/except вокруг клиента recv().

Смежные вопросы