socket.makefile () не отправляет данные - PullRequest
0 голосов
/ 05 августа 2020

У меня есть сервер, который должен отправлять текст клиенту с помощью socket.makefile(), но он ничего не получает от .write() («AB C»), хотя эта функция возвращает правильное количество символов (3) . Почему бы и нет?

Клиент успешно получает текст, отправленный через socket.send() («DE» повторяется), поэтому я думаю, что с клиентом все в порядке.

Вот код сервера после создания прослушивающего сокета s :

connection, addr = s.accept()
socket_file = connection.makefile('w')
while True:
    time.sleep(1)
    number = socket_file.write("ABC") # Not received by client. Why?
    print(number) # Shows 3 as expected
    connection.send("DE".encode()) # Received by client

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Отключите буферизацию, используя buffering=0. Для этого требуется двоичный режим ('wb'). что требует отправки текста в байтах (.encode()).

connection, addr = s.accept()
socket_file = connection.makefile('wb', buffering=0)
while True:
    time.sleep(1)
    number = socket_file.write("ABC".encode())
    print(number)
    connection.send("DE".encode())
0 голосов
/ 05 августа 2020

Требуется

socket_file.flush()

после .write() в sh буфер и немедленно отправить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...