Python - Клиент и сервер связи - PullRequest
0 голосов
/ 25 мая 2018

Я написал скрипт на python, который будет взаимодействовать с сервером, получать его данные и отправлять данные обратно на сервер, своего рода «эхо-клиент».

Это то, что я 'я написал:

import socket
import time

def netcat(hostname, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((hostname, port))
    s.shutdown(socket.SHUT_WR)
    while 1:
        data = s.recv(1024)
        if data == "":
            break
        print "Received:", repr(data)
        data = data.replace("\n", "")
        time.sleep(1)
        s.sendall(data)
        print "Sent:", data
    print "Connection closed."
    s.close()

netcat("127.0.0.1", 4444)

Я получаю этот вывод:

Received: 'Welcome!\n'

И после этого я получаю эту ошибку:

Traceback (most recent call last):
  File "client.py", line 22, in <module>
    netcat("127.0.0.1", 4444)
  File "client.py", line 17, in netcat
    s.sendall(data)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 32] Broken pipe

Я уже искалрешение этой ошибки онлайн, но безуспешно.

Может кто-нибудь помочь мне разобраться?

Спасибо

1 Ответ

0 голосов
/ 25 мая 2018

В последнее время я много работал над сокетами.Сейчас у меня нет сервера для тестирования вашего кода, поэтому я решил быстро прокомментировать то, что вижу.Похоже, вы вначале закрывали сокет (для записи), поэтому ваш оператор получения сработал, но ваш оператор sendall завершился неудачей.

def netcat(hostname, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((hostname, port))
    s.shutdown(socket.SHUT_WR) <-- WHY IS THIS HERE?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...